| Copyright | (C) 2013-2014 Richard Eisenberg Jan Stolarek |
|---|---|
| License | BSD-style (see LICENSE) |
| Maintainer | Richard Eisenberg (rae@cs.brynmawr.edu) |
| Stability | experimental |
| Portability | non-portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.Singletons.Prelude.Either
Description
Defines functions and datatypes relating to the singleton for Either,
including a singletons version of all the definitions in Data.Either.
Because many of these definitions are produced by Template Haskell,
it is not possible to create proper Haddock documentation. Please look
up the corresponding operation in Data.Either. Also, please excuse
the apparent repeated variable names. This is due to an interaction
between Template Haskell and Haddock.
- data family Sing (a :: k)
- type SEither = (Sing :: Either a b -> Type)
- either_ :: (a -> c) -> (b -> c) -> Either a b -> c
- type family Either_ (a :: TyFun a c -> Type) (a :: TyFun b c -> Type) (a :: Either a b) :: c where ...
- sEither_ :: forall (t :: TyFun a c -> Type) (t :: TyFun b c -> Type) (t :: Either a b). Sing t -> Sing t -> Sing t -> Sing (Apply (Apply (Apply Either_Sym0 t) t) t :: c)
- type family Lefts (a :: [Either a b]) :: [a] where ...
- sLefts :: forall (t :: [Either a b]). Sing t -> Sing (Apply LeftsSym0 t :: [a])
- type family Rights (a :: [Either a b]) :: [b] where ...
- sRights :: forall (t :: [Either a b]). Sing t -> Sing (Apply RightsSym0 t :: [b])
- type family PartitionEithers (a :: [Either a b]) :: ([a], [b]) where ...
- sPartitionEithers :: forall (t :: [Either a b]). Sing t -> Sing (Apply PartitionEithersSym0 t :: ([a], [b]))
- type family IsLeft (a :: Either a b) :: Bool where ...
- sIsLeft :: forall (t :: Either a b). Sing t -> Sing (Apply IsLeftSym0 t :: Bool)
- type family IsRight (a :: Either a b) :: Bool where ...
- sIsRight :: forall (t :: Either a b). Sing t -> Sing (Apply IsRightSym0 t :: Bool)
- data LeftSym0 (l :: TyFun a1627455901 (Either a1627455901 b1627455902))
- type LeftSym1 (t :: a1627455901) = Left t
- data RightSym0 (l :: TyFun b1627455902 (Either a1627455901 b1627455902))
- type RightSym1 (t :: b1627455902) = Right t
- data Either_Sym0 (l :: TyFun (TyFun a1627833983 c1627833984 -> Type) (TyFun (TyFun b1627833985 c1627833984 -> Type) (TyFun (Either a1627833983 b1627833985) c1627833984 -> Type) -> Type))
- data Either_Sym1 (l :: TyFun a1627833983 c1627833984 -> Type) (l :: TyFun (TyFun b1627833985 c1627833984 -> Type) (TyFun (Either a1627833983 b1627833985) c1627833984 -> Type))
- data Either_Sym2 (l :: TyFun a1627833983 c1627833984 -> Type) (l :: TyFun b1627833985 c1627833984 -> Type) (l :: TyFun (Either a1627833983 b1627833985) c1627833984)
- type Either_Sym3 (t :: TyFun a1627833983 c1627833984 -> Type) (t :: TyFun b1627833985 c1627833984 -> Type) (t :: Either a1627833983 b1627833985) = Either_ t t t
- data LeftsSym0 (l :: TyFun [Either a1627835095 b1627835096] [a1627835095])
- type LeftsSym1 (t :: [Either a1627835095 b1627835096]) = Lefts t
- data RightsSym0 (l :: TyFun [Either a1627835093 b1627835094] [b1627835094])
- type RightsSym1 (t :: [Either a1627835093 b1627835094]) = Rights t
- data IsLeftSym0 (l :: TyFun (Either a1627835089 b1627835090) Bool)
- type IsLeftSym1 (t :: Either a1627835089 b1627835090) = IsLeft t
- data IsRightSym0 (l :: TyFun (Either a1627835087 b1627835088) Bool)
- type IsRightSym1 (t :: Either a1627835087 b1627835088) = IsRight t
The Either singleton
The singleton kind-indexed data family.
Instances
| data Sing Bool # | |
| data Sing Ordering # | |
| data Sing * # | |
| data Sing Nat # | |
| data Sing Symbol # | |
| data Sing () # | |
| data Sing [a] # | |
| data Sing (Maybe a) # | |
| data Sing (NonEmpty a) # | |
| data Sing (Either a b) # | |
| data Sing (a, b) # | |
| data Sing ((~>) k1 k2) # | |
| data Sing (a, b, c) # | |
| data Sing (a, b, c, d) # | |
| data Sing (a, b, c, d, e) # | |
| data Sing (a, b, c, d, e, f) # | |
| data Sing (a, b, c, d, e, f, g) # | |
Though Haddock doesn't show it, the Sing instance above declares
constructors
SLeft :: Sing a -> Sing (Left a) SRight :: Sing b -> Sing (Right b)
Singletons from Data.Either
type family Either_ (a :: TyFun a c -> Type) (a :: TyFun b c -> Type) (a :: Either a b) :: c where ... #
sEither_ :: forall (t :: TyFun a c -> Type) (t :: TyFun b c -> Type) (t :: Either a b). Sing t -> Sing t -> Sing t -> Sing (Apply (Apply (Apply Either_Sym0 t) t) t :: c) #
The preceding two definitions are derived from the function either in
Data.Either. The extra underscore is to avoid name clashes with the type
Either.
type family PartitionEithers (a :: [Either a b]) :: ([a], [b]) where ... #
Equations
| PartitionEithers a_1627835136 = Apply (Apply (Apply FoldrSym0 (Apply (Apply Either_Sym0 (Let1627835143LeftSym1 a_1627835136)) (Let1627835143RightSym1 a_1627835136))) (Apply (Apply Tuple2Sym0 '[]) '[])) a_1627835136 |
sPartitionEithers :: forall (t :: [Either a b]). Sing t -> Sing (Apply PartitionEithersSym0 t :: ([a], [b])) #
Defunctionalization symbols
data Either_Sym0 (l :: TyFun (TyFun a1627833983 c1627833984 -> Type) (TyFun (TyFun b1627833985 c1627833984 -> Type) (TyFun (Either a1627833983 b1627833985) c1627833984 -> Type) -> Type)) #
Instances
| SuppressUnusedWarnings (TyFun (TyFun a1627833983 c1627833984 -> Type) (TyFun (TyFun b1627833985 c1627833984 -> Type) (TyFun (Either a1627833983 b1627833985) c1627833984 -> Type) -> Type) -> *) (Either_Sym0 a1627833983 b1627833985 c1627833984) # | |
| type Apply (TyFun a1627833983 c1627833984 -> Type) (TyFun (TyFun b1627833985 c1627833984 -> Type) (TyFun (Either a1627833983 b1627833985) c1627833984 -> Type) -> Type) (Either_Sym0 a1627833983 b1627833985 c1627833984) l # | |
data Either_Sym1 (l :: TyFun a1627833983 c1627833984 -> Type) (l :: TyFun (TyFun b1627833985 c1627833984 -> Type) (TyFun (Either a1627833983 b1627833985) c1627833984 -> Type)) #
Instances
| SuppressUnusedWarnings ((TyFun a1627833983 c1627833984 -> Type) -> TyFun (TyFun b1627833985 c1627833984 -> Type) (TyFun (Either a1627833983 b1627833985) c1627833984 -> Type) -> *) (Either_Sym1 a1627833983 b1627833985 c1627833984) # | |
| type Apply (TyFun b1627833985 c1627833984 -> Type) (TyFun (Either a1627833983 b1627833985) c1627833984 -> Type) (Either_Sym1 a1627833983 b1627833985 c1627833984 l1) l2 # | |
data Either_Sym2 (l :: TyFun a1627833983 c1627833984 -> Type) (l :: TyFun b1627833985 c1627833984 -> Type) (l :: TyFun (Either a1627833983 b1627833985) c1627833984) #
Instances
| SuppressUnusedWarnings ((TyFun a1627833983 c1627833984 -> Type) -> (TyFun b1627833985 c1627833984 -> Type) -> TyFun (Either a1627833983 b1627833985) c1627833984 -> *) (Either_Sym2 a1627833983 b1627833985 c1627833984) # | |
| type Apply (Either a b) c (Either_Sym2 a b c l1 l2) l3 # | |
type Either_Sym3 (t :: TyFun a1627833983 c1627833984 -> Type) (t :: TyFun b1627833985 c1627833984 -> Type) (t :: Either a1627833983 b1627833985) = Either_ t t t #
data RightsSym0 (l :: TyFun [Either a1627835093 b1627835094] [b1627835094]) #
Instances
| SuppressUnusedWarnings (TyFun [Either a1627835093 b1627835094] [b1627835094] -> *) (RightsSym0 a1627835093 b1627835094) # | |
| type Apply [Either a b] [b] (RightsSym0 a b) l # | |
type RightsSym1 (t :: [Either a1627835093 b1627835094]) = Rights t #
data IsLeftSym0 (l :: TyFun (Either a1627835089 b1627835090) Bool) #
Instances
| SuppressUnusedWarnings (TyFun (Either a1627835089 b1627835090) Bool -> *) (IsLeftSym0 a1627835089 b1627835090) # | |
| type Apply (Either a b) Bool (IsLeftSym0 a b) l # | |
type IsLeftSym1 (t :: Either a1627835089 b1627835090) = IsLeft t #
data IsRightSym0 (l :: TyFun (Either a1627835087 b1627835088) Bool) #
Instances
| SuppressUnusedWarnings (TyFun (Either a1627835087 b1627835088) Bool -> *) (IsRightSym0 a1627835087 b1627835088) # | |
| type Apply (Either a b) Bool (IsRightSym0 a b) l # | |
type IsRightSym1 (t :: Either a1627835087 b1627835088) = IsRight t #