1{-# language DataKinds #-}
2{-# language FlexibleContexts #-}
3{-# language FlexibleInstances #-}
5{-# language LambdaCase #-}
6{-# language StandaloneKindSignatures #-}
7{-# language TypeOperators #-}
11 , SLabels( SNil, SCons )
12 , KnownLabels( labelsSing )
18import Data.Kind ( Constraint, Type )
19import Data.List.NonEmpty ( NonEmpty, nonEmpty )
20import Data.Maybe ( fromMaybe )
21import Data.Proxy ( Proxy( Proxy ) )
22import GHC.TypeLits ( KnownSymbol, Symbol, symbolVal )
30type SLabels :: Labels -> Type
31data SLabels labels where
33 SCons :: KnownSymbol label => Proxy label -> SLabels labels -> SLabels (label ': labels)
36type KnownLabels :: Labels -> Constraint
37class KnownLabels labels where
38 labelsSing :: SLabels labels
41instance KnownLabels '[] where
45instance (KnownSymbol label, KnownLabels labels) =>
46 KnownLabels (label ': labels)
48 labelsSing = SCons Proxy labelsSing
51renderLabels :: SLabels labels -> NonEmpty String
52renderLabels = fromMaybe (pure "anon") . nonEmpty . go
54 go :: SLabels labels -> [String]
57 SCons label labels -> symbolVal label : go labels
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list