Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data Rec a b :: (u -> *) -> [u] -> * where
- data CoRec :: (u -> *) -> [u] -> * where
- CoRecHere :: !(f r) -> CoRec f (r : rs)
- CoRecThere :: !(CoRec f rs) -> CoRec f (r : rs)
- newtype Flap a f = Flap {
- getFlap :: f a
- newtype FunctorRec fs a = FunctorRec {
- getFunctorRec :: Rec (Flap a) fs
- newtype FunctorCoRec fs a = FunctorCoRec {
- getFunctorCoRec :: CoRec (Flap a) fs
Documentation
data Rec a b :: (u -> *) -> [u] -> * where
A record is parameterized by a universe u
, an interpretation f
and a
list of rows rs
. The labels or indices of the record are given by
inhabitants of the kind u
; the type of values at any label r :: u
is
given by its interpretation f r :: *
.
Eq (Rec k f ([] k)) | |
(Eq (f r), Eq (Rec k f rs)) => Eq (Rec k f ((:) k r rs)) | |
Ord (Rec k f ([] k)) | |
(Ord (f r), Ord (Rec k f rs)) => Ord (Rec k f ((:) k r rs)) | |
RecAll k f rs Show => Show (Rec k f rs) | Records may be shown insofar as their points may be shown.
|
Storable (Rec k f ([] k)) | |
(Storable (f r), Storable (Rec k f rs)) => Storable (Rec k f ((:) k r rs)) | |
Monoid (Rec k f ([] k)) | |
(Monoid (f r), Monoid (Rec k f rs)) => Monoid (Rec k f ((:) k r rs)) |
data CoRec :: (u -> *) -> [u] -> * where Source
CoRec
is a generalized coproduct. The value it holds
is the interpretation function f
applied to exactly one
of the types in the list. While a Rec
can be thought of
a nesting of tuples, a CoRec
can be thought of as a
nesting of Either
s.
CoRecHere :: !(f r) -> CoRec f (r : rs) | |
CoRecThere :: !(CoRec f rs) -> CoRec f (r : rs) |
(Show (CoRec k f ((:) k s rs)), Show (f r)) => Show (CoRec k f ((:) k r ((:) k s rs))) Source | |
Show (f r) => Show (CoRec k f ((:) k r ([] k))) Source | |
(Monoid (CoRec k f ((:) k s rs)), Monoid (f r)) => Monoid (CoRec k f ((:) k r ((:) k s rs))) Source | |
Monoid (f r) => Monoid (CoRec k f ((:) k r ([] k))) Source |
newtype FunctorRec fs a Source
FunctorRec | |
|
(Functor r, Functor (FunctorRec * rs)) => Functor (FunctorRec * ((:) (* -> *) r rs)) Source | |
Functor (FunctorRec * ([] (* -> *))) Source | |
(Applicative r, Applicative (FunctorRec * rs)) => Applicative (FunctorRec * ((:) (* -> *) r rs)) Source | |
Applicative (FunctorRec * ([] (* -> *))) Source | |
(Contravariant r, Contravariant (FunctorRec * rs)) => Contravariant (FunctorRec * ((:) (* -> *) r rs)) Source | |
Contravariant (FunctorRec * ([] (* -> *))) Source | |
RecAll (k -> *) (Flap k a) fs Show => Show (FunctorRec k fs a) Source |
newtype FunctorCoRec fs a Source
FunctorCoRec | |
|
(Functor f, Functor (FunctorCoRec * ((:) (* -> *) g fs))) => Functor (FunctorCoRec * ((:) (* -> *) f ((:) (* -> *) g fs))) Source | |
Functor r => Functor (FunctorCoRec * ((:) (* -> *) r ([] (* -> *)))) Source | |
(Contravariant f, Contravariant (FunctorCoRec * ((:) (* -> *) g fs))) => Contravariant (FunctorCoRec * ((:) (* -> *) f ((:) (* -> *) g fs))) Source | |
Contravariant r => Contravariant (FunctorCoRec * ((:) (* -> *) r ([] (* -> *)))) Source | |
(Show (CoRec (k -> *) (Flap k r) ((:) (k -> *) g hs)), Show (f r)) => Show (FunctorCoRec k ((:) (k -> *) f ((:) (k -> *) g hs)) r) Source | |
Show (f r) => Show (FunctorCoRec k ((:) (k -> *) f ([] (k -> *))) r) Source |