Kind of type-level expressions indexed by their result type.
Modulefirst-class-families-0.8.1.0Haskell2010
Fcf
First-class type families
For example, here is a regular type family:
type family FromMaybe (a :: k) (m :: Maybe k) :: k
type instance FromMaybe a 'Nothing = a
type instance FromMaybe a ('Just b) = b
With Fcf, it translates to a data declaration:
data FromMaybe :: k -> Maybe k -> Exp k
type instance Eval (FromMaybe a 'Nothing) = a
type instance Eval (FromMaybe a ('Just b)) = b
Essential language extensions for Fcf:
{-# LANGUAGE
DataKinds,
PolyKinds,
TypeFamilies,
TypeOperators,
UndecidableInstances #-}- 67 types
- 1 class
- Packagefirst-class-families-0.8.1.0
- Exports71
- LanguageHaskell2010
- LicenceMIT
- SourceFcf.hs
First-class type families
3 declarationsExpression evaluator.
Instances190Eval, …
type Eval MEmpty_ = MEmptyDefined in first-class-families-0.8.1.0 · Fcf.Class.Monoidtype Eval (Bimap f g '(x, y)) = '(Eval (f x), Eval (g y))Defined in first-class-families-0.8.1.0 · Fcf.Class.Bifunctortype Eval (Bimap f g ('Left x)) = 'Left (Eval (f x))Defined in first-class-families-0.8.1.0 · Fcf.Class.Bifunctortype Eval (Bimap f g ('Right y)) = 'Right (Eval (g y))Defined in first-class-families-0.8.1.0 · Fcf.Class.Bifunctortype Eval (First f2 x) = Eval (Bimap f2 Pure x)Defined in first-class-families-0.8.1.0 · Fcf.Class.Bifunctortype Eval (Second g x) = Eval (Bimap Pure g x)Defined in first-class-families-0.8.1.0 · Fcf.Class.Bifunctortype Eval (All p lst) = Eval (Foldr (Bicomap p Pure (&&)) 'True lst)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (And lst) = Eval (Foldr (&&) 'True lst)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Any p lst) = Eval (Foldr (Bicomap p Pure (||)) 'False lst)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Concat xs) = Eval (FoldMap Pure xs)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (ConcatMap f xs) = Eval (FoldMap f xs)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (FoldMap f 'Nothing) = MEmptyDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (FoldMap f '[]) = MEmptyDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (FoldMap f ('Left _a)) = MEmptyDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (FoldMap f ('Right x)) = Eval (f x)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (FoldMap f ('Just x)) = Eval (f x)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (FoldMap f (x ': xs)) = Eval (f x) <> Eval (FoldMap f xs)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y 'Nothing) = yDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y '[]) = yDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y ('Left _a)) = yDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y ('Right x)) = Eval (f x y)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y ('Just x)) = Eval (f x y)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y (x ': xs)) = Eval (f x (Eval (Foldr f y xs)))Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Or lst) = Eval (Foldr (||) 'False lst)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Sum ns) = Eval (Foldr (+)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldable0
ns)type Eval (Map f 'Nothing) = 'NothingDefined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '(x, a2)) = '(x, Eval (f a2))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '(x, y, a2)) = '(x, y, Eval (f a2))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '(x, y, z, a2)) = '(x, y, z, Eval (f a2))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '(x, y, z, w, a2)) = '(x, y, z, w, Eval (f a2))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f ('Left x)) = 'Left xDefined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f ('Right a3)) = 'Right (Eval (f a3))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f ('Just a3)) = 'Just (Eval (f a3))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f (a2 ': as)) = Eval (f a2) ': Eval (Map f as)Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Compare 'Nothing 'Nothing) = 'EQDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'Nothing ('Just _b)) = 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'EQ 'GT) = 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'EQ 'LT) = 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'False 'True) = 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'GT 'EQ) = 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'GT 'LT) = 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'LT 'EQ) = 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'LT 'GT) = 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare 'True 'False) = 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare '(a3, a4) '(b1, b2)) = Eval (Compare a3 b1) <> Eval (Compare a4 b2)Defined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare '(a4, a5, a6) '(b1, b2, b3)) = (Eval (Compare a4 b1) <> Eval (Compare a5 b2)) <> Eval (Compare a6 b3)Defined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare '[] '[]) = 'EQDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare '[] (_y ': _ys)) = 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare ('Left _a) ('Right _b)) = 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare ('Left a2) ('Left b2)) = Eval (Compare a2 b2)Defined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare ('Right _a) ('Left _b)) = 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare ('Right a3) ('Right b)) = Eval (Compare a3 b)Defined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare ('Just _a) 'Nothing) = 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare ('Just a2) ('Just b)) = Eval (Compare a2 b)Defined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare (_x ': _xs) '[]) = 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare (x ': xs) (y ': ys)) = Eval (Compare x y) <> Eval (Compare xs ys)Defined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare a a) = 'EQDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare a a) = 'EQDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare a b) = CmpSymbol a bDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare a b) = CmpNat a bDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (Compare a b) = 'EQDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (ConstFn a2 _b) = a2Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (Flip f y x) = Eval (f x y)Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (Join e) = Eval (Eval e)Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (LiftM2 f x y) = Eval (f (Eval x) (Eval y))Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (LiftM3 f x y z) = Eval (f (Eval x) (Eval y) (Eval z))Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (Pure x) = xDefined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (Pure1 f x) = f xDefined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (Pure2 f x y) = f x yDefined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (Pure3 f x y z) = f x y zDefined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (Not 'False) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (Not 'True) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (UnBool fal tru 'False) = Eval falDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (UnBool fal tru 'True) = Eval truDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (FromMaybe _a ('Just b)) = bDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (FromMaybe a2 'Nothing) = a2Defined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (Fst '(a2, _b)) = a2Defined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (IsJust 'Nothing) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (IsJust ('Just _a)) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (IsLeft ('Left _a)) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (IsLeft ('Right _a)) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (IsNothing 'Nothing) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (IsNothing ('Just _a)) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (IsRight ('Left _a)) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (IsRight ('Right _a)) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (Snd '(_a, b)) = bDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (UnEither f g ('Left x)) = Eval (f x)Defined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (UnEither f g ('Right y)) = Eval (g y)Defined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (UnMaybe y f 'Nothing) = Eval yDefined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (UnMaybe y f ('Just x)) = Eval (f x)Defined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (Uncurry f '(x, y)) = Eval (f x y)Defined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (Bicomap f g r x y) = Eval (r (Eval (f x)) (Eval (g y)))Defined in first-class-families-0.8.1.0 · Fcf.Data.Functiontype Eval (On r f x y) = Eval (r (Eval (f x)) (Eval (f y)))Defined in first-class-families-0.8.1.0 · Fcf.Data.Functiontype Eval (Break p lst) = Eval (Span (Not <=< p) lst)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Cons a2 as) = a2 ': asDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Cons2 '(a3, b) '(as, bs)) = '(a3 ': as, b ': bs)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Drop n as) = Drop_ n asDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (DropWhile p '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (DropWhile p (x ': xs)) = Eval (If (Eval (p x)) (DropWhile p xs) (Pure (x ': xs)))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Elem a2 as) = Eval (IsJust =<< FindIndex (TyEq a2) as)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Filter _p '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Filter p (a2 ': as)) = Eval (If (Eval (p a2)) ('(:) a2 <$> Filter p as) (Filter p as))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Find _p '[]) = 'NothingDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Find p (a2 ': as)) = Eval (If (Eval (p a2)) (Pure ('Just a2)) (Find p as))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (FindIndex _p '[]) = 'NothingDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (FindIndex p (a2 ': as)) = Eval (If (Eval (p a2)) (Pure ('JustDefined in first-class-families-0.8.1.0 · Fcf.Data.List0
)) (Map ((+)1
) =<< FindIndex p as))type Eval (Head '[]) = 'NothingDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Head (a2 ': _as)) = 'Just a2Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Init '[a2]) = 'Just '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Init '[]) = 'NothingDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Init (a2 ': b ': as)) = Eval (Map (Cons a2) =<< Init (b ': as))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Intercalate xs xss) = Eval (Concat =<< Intersperse xs xss)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Intersperse _1 '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Intersperse sep (x ': xs)) = x ': Eval (PrependToAll sep xs)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (IsInfixOf xs ys) = Eval (Any (IsPrefixOf xs) =<< Tails ys)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (IsPrefixOf xs ys) = IsPrefixOf_ xs ysDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (IsSuffixOf xs ys) = Eval (IsPrefixOf (Reverse @@ xs) (Reverse @@ ys))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Last '[a2]) = 'Just a2Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Last '[]) = 'NothingDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Last (a2 ': b ': as)) = Eval (Last (b ': as))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Length '[]) =Defined in first-class-families-0.8.1.0 · Fcf.Data.List0
type Eval (Length (a2 ': as)) =Defined in first-class-families-0.8.1.0 · Fcf.Data.List1
+ Eval (Length as)type Eval (Lookup a as) = Eval (Map Snd (Eval (Find (TyEq a <=< Fst) as)))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Null '[]) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Null (a2 ': as)) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (NumIter a s) = If (Eval (s >Defined in first-class-families-0.8.1.0 · Fcf.Data.List0
)) ('Just '(a, s -1
)) 'Nothingtype Eval (PartHelp p a2 '(xs, ys)) = If (Eval (p a2)) '(a2 ': xs, ys) '(xs, a2 ': ys)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Partition p lst) = Eval (Foldr (PartHelp p) '('[], '[]) lst)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (PrependToAll _1 '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (PrependToAll sep (x ': xs)) = sep ': x ': Eval (PrependToAll sep xs)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Replicate n a2) = Eval (Unfoldr (NumIter a2) n)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Rev '[] ys) = ysDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Rev (x ': xs) ys) = Eval (Rev xs (x ': ys))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Reverse l) = Eval (Rev l '[])Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (SetIndex n a' as) = SetIndexImpl n a' asDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Snoc lst a) = Eval (lst ++ '[a])Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Span p lst) = '(Eval (TakeWhile p lst), Eval (DropWhile p lst))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Tail '[]) = 'NothingDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Tail (_a ': as)) = 'Just asDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Tails '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Tails (a2 ': as)) = (a2 ': as) ': Eval (Tails as)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Take n as) = Take_ n asDefined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (TakeWhile p '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (TakeWhile p (x ': xs)) = Eval (If (Eval (p x)) ('(:) x <$> TakeWhile p xs) (Pure '[]))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (UnList y f xs) = Eval (Foldr f y xs)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Unfoldr f c) = Eval (UnfoldrCase f (f @@ c))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (UnfoldrCase _1 'Nothing) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (UnfoldrCase f ('Just ab)) = Eval (Fst ab) ': Eval (Unfoldr f (Eval (Snd ab)))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Unzip as) = Eval (Foldr Cons2 '('[], '[]) (Eval as))Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Zip as bs) = Eval (ZipWith (Pure2 '((,))) as bs)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (ZipWith _f '[] _bs) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (ZipWith _f _as '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (ZipWith f (a2 ': as) (b2 ': bs)) = Eval (f a2 b2) ': Eval (ZipWith f as bs)Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (Case ms a) = Case_ ms aDefined in first-class-families-0.8.1.0 · Fcf.Utilstype Eval (Constraints '[]) = ()Defined in first-class-families-0.8.1.0 · Fcf.Utilstype Eval (Constraints (a ': as)) = (a, Eval (Constraints as))Defined in first-class-families-0.8.1.0 · Fcf.Utilstype Eval (Error msg) = TypeError ('Text msg)Defined in first-class-families-0.8.1.0 · Fcf.Utilstype Eval (TError msg) = TypeError msgDefined in first-class-families-0.8.1.0 · Fcf.Utilstype Eval (TyEq a b) = TyEqImpl a bDefined in first-class-families-0.8.1.0 · Fcf.Utilstype Eval ('False && b) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval ('False || b) = bDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval ('True && b) = bDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval ('True || b) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval ((<=<) f g x) = Eval (f (Eval (g x)))Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval ((***) f f' '(b2, b'2)) = '(Eval (f b2), Eval (f' b'2))Defined in first-class-families-0.8.1.0 · Fcf.Data.Commontype Eval (a && 'False) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (a && 'True) = aDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (a || 'False) = aDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (a || 'True) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (a * b) = a * bDefined in first-class-families-0.8.1.0 · Fcf.Data.Nattype Eval (a + b) = a + bDefined in first-class-families-0.8.1.0 · Fcf.Data.Nattype Eval (a - b) = a - bDefined in first-class-families-0.8.1.0 · Fcf.Data.Nattype Eval (a < b) = Eval (Not =<< (a >= b))Defined in first-class-families-0.8.1.0 · Fcf.Data.Nattype Eval (a <= b) = a <=? bDefined in first-class-families-0.8.1.0 · Fcf.Data.Nattype Eval (a > b) = Eval (Not =<< (a <= b))Defined in first-class-families-0.8.1.0 · Fcf.Data.Nattype Eval (a >= b) = b <=? aDefined in first-class-families-0.8.1.0 · Fcf.Data.Nattype Eval (a ^ b) = a ^ bDefined in first-class-families-0.8.1.0 · Fcf.Data.Nattype Eval (a2 < b) = Compare a2 b ~== 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (a2 <= b) = Compare a2 b ~/= 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (a2 > b) = Compare a2 b ~== 'GTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (a2 >= b) = Compare a2 b ~/= 'LTDefined in first-class-families-0.8.1.0 · Fcf.Class.Ordtype Eval (e >>= k) = Eval (k (Eval e))Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (f $ a3) = Eval (f a3)Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (f <$> e) = f (Eval e)Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (f <*> e) = Eval f (Eval e)Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (k =<< e) = Eval (k (Eval e))Defined in first-class-families-0.8.1.0 · Fcf.Combinatorstype Eval (x .<> y) = x <> yDefined in first-class-families-0.8.1.0 · Fcf.Class.Monoidtype Eval (x & f) = Eval (f x)Defined in first-class-families-0.8.1.0 · Fcf.Data.Functiontype Eval (xs ++ ys) = xs <> ysDefined in first-class-families-0.8.1.0 · Fcf.Data.List
Apply and evaluate a unary type function.
Functional combinators
Note that this denotes the identity function, so ($) f can usually be
replaced with f.
Operations on common types
0 declarationsPairs
Specialization of Bimap for pairs.
Either
Maybe
Lists
Right fold.
Example
:kind! Eval (Foldr (+) 0 [1, 2, 3, 4])Eval (Foldr (+) 0 [1, 2, 3, 4]) :: Natural= 10
Instances6Eval
type Eval (Foldr f y 'Nothing) = yDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y '[]) = yDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y ('Left _a)) = yDefined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y ('Right x)) = Eval (f x y)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y ('Just x)) = Eval (f x y)Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldabletype Eval (Foldr f y (x ': xs)) = Eval (f x (Eval (Foldr f y xs)))Defined in first-class-families-0.8.1.0 · Fcf.Class.Foldable
This is Foldr with its argument flipped.
List catenation.
Example
data Example where Ex :: a -> Example -- Hide the type of examples to avoid brittleness in different GHC versions:kind! Ex (Eval ([1, 2] ++ [3, 4]) :: [Natural])Ex (Eval ([1, 2] ++ [3, 4]) :: [Natural]) :: Example= Ex [1, 2, 3, 4]
Keep all elements that satisfy a predicate, remove all that don't.
Example
:kind! Eval (Filter ((>) 3) [1,2,3,0])Eval (Filter ((>) 3) [1,2,3,0]) :: [Natural]= [1, 2, 0]
Find Just the first element satisfying a predicate, or evaluate to
Nothing if no element satisfies the predicate.
Example
:kind! Eval (Find (TyEq 0) [1,2,3])Eval (Find (TyEq 0) [1,2,3]) :: Maybe Natural= Nothing
:kind! Eval (Find (TyEq 0) [1,2,3,0])Eval (Find (TyEq 0) [1,2,3,0]) :: Maybe Natural= Just 0
Find the index of an element satisfying the predicate.
Example
:kind! Eval (FindIndex ((<=) 3) [1,2,3,1,2,3])Eval (FindIndex ((<=) 3) [1,2,3,1,2,3]) :: Maybe Natural= Just 2
:kind! Eval (FindIndex ((>) 0) [1,2,3,1,2,3])Eval (FindIndex ((>) 0) [1,2,3,1,2,3]) :: Maybe Natural= Nothing
Find an element associated with a key in an association list.
Modify an element at a given index.
The list is unchanged if the index is out of bounds.
Example
:kind! Eval (SetIndex 2 7 [1,2,3])Eval (SetIndex 2 7 [1,2,3]) :: [Natural]= [1, 2, 7]
Combine elements of two lists pairwise.
Example
:kind! Eval (ZipWith (+) [1,2,3] [1,1,1])Eval (ZipWith (+) [1,2,3] [1,1,1]) :: [Natural]= [2, 3, 4]
Instances3Eval
type Eval (ZipWith _f '[] _bs) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (ZipWith _f _as '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Data.Listtype Eval (ZipWith f (a2 ': as) (b2 ': bs)) = Eval (f a2 b2) ': Eval (ZipWith f as bs)Defined in first-class-families-0.8.1.0 · Fcf.Data.List
Append elements to two lists. Used in the definition of Unzip.
Bool
N.B.: The order of the two branches is the opposite of "if":
UnBool ifFalse ifTrue bool.
This mirrors the default order of constructors:
data Bool = False | True
----------- False < True
Instances4Eval
type Eval ('False || b) = bDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval ('True || b) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (a || 'False) = aDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (a || 'True) = 'TrueDefined in first-class-families-0.8.1.0 · Fcf.Data.Bool
Instances4Eval
type Eval ('False && b) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval ('True && b) = bDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (a && 'False) = 'FalseDefined in first-class-families-0.8.1.0 · Fcf.Data.Booltype Eval (a && 'True) = aDefined in first-class-families-0.8.1.0 · Fcf.Data.Bool
Case splitting
(Limited) equivalent of \case { .. } syntax. Supports matching of exact
values (-->) and final matches for any value (Any) or for passing value
to subcomputation (Else). Examples:
type BoolToNat = Case
[ 'True --> 0
, 'False --> 1
]
type NatToBool = Case
[ 0 --> 'False
, Any 'True
]
type ZeroOneOrSucc = Case
[ 0 --> 0
, 1 --> 1
, Else ((+) 1)
]
Match concrete type in Case.
Match on predicate being successful with type in Case.
Match any type in Case. Should be used as a final branch.
Note: this identifier conflicts with Any (from Fcf.Class.Foldable) Any (from Data.Monoid), and Any (from GHC.Exts).
We recommend importing this one qualified.
Pass type being matched in Case to subcomputation. Should be used as a final branch.
Nat
Overloaded operations
2 declarationsType-level fmap for type-level functors.
Note: this name clashes with Data.Map.Lazy.Map from containers.
FMap is provided as a synonym to avoid this.
Example
data Example where Ex :: a -> Example -- Hide the type of examples to avoid brittleness in different GHC versionsdata AddMul :: Nat -> Nat -> Exp Nattype instance Eval (AddMul x y) = (x TL.+ y) TL.* (x TL.+ y):kind! Ex (Eval (Map (AddMul 2) '[0, 1, 2, 3, 4]) :: [Nat])Ex (Eval (Map (AddMul 2) '[0, 1, 2, 3, 4]) :: [Nat]) :: Example= Ex [4, 9, 16, 25, 36]
Instances10Eval, …
type Eval (Map f 'Nothing) = 'NothingDefined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '(x, a2)) = '(x, Eval (f a2))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '(x, y, a2)) = '(x, y, Eval (f a2))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '(x, y, z, a2)) = '(x, y, z, Eval (f a2))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '(x, y, z, w, a2)) = '(x, y, z, w, Eval (f a2))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f '[]) = '[]Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f ('Left x)) = 'Left xDefined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f ('Right a3)) = 'Right (Eval (f a3))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f ('Just a3)) = 'Just (Eval (f a3))Defined in first-class-families-0.8.1.0 · Fcf.Class.Functortype Eval (Map f (a2 ': as)) = Eval (f a2) ': Eval (Map f as)Defined in first-class-families-0.8.1.0 · Fcf.Class.Functor
Type-level bimap.
Example
data Example where Ex :: a -> Example -- Hide the type of examples to avoid brittleness in different GHC versions:kind! Ex (Eval (Bimap ((+) 1) (Flip (-) 1) '(2, 4)) :: (Natural, Natural))Ex (Eval (Bimap ((+) 1) (Flip (-) 1) '(2, 4)) :: (Natural, Natural)) :: Example= Ex '(3, 3)
Instances3Eval
type Eval (Bimap f g '(x, y)) = '(Eval (f x), Eval (g y))Defined in first-class-families-0.8.1.0 · Fcf.Class.Bifunctortype Eval (Bimap f g ('Left x)) = 'Left (Eval (f x))Defined in first-class-families-0.8.1.0 · Fcf.Class.Bifunctortype Eval (Bimap f g ('Right y)) = 'Right (Eval (g y))Defined in first-class-families-0.8.1.0 · Fcf.Class.Bifunctor
Miscellaneous
6 declarationsType-level error.
Conjunction of a list of constraints.
Instances2Eval
type Eval (Constraints '[]) = ()Defined in first-class-families-0.8.1.0 · Fcf.Utilstype Eval (Constraints (a ': as)) = (a, Eval (Constraints as))Defined in first-class-families-0.8.1.0 · Fcf.Utils
A stuck type that can be used like a type-level undefined.