Copyright | (c) Fumiaki Kinoshita 2017 |
---|---|
License | BSD3 |
Maintainer | Fumiaki Kinoshita <fumiexcel@gmail.com> |
Safe Haskell | Safe |
Language | Haskell2010 |
Data.Extensible.Class
Description
- class (Functor f, Profunctor p) => Extensible f p t where
- piece :: (x ∈ xs, Extensible f p t) => Optic' p f (t h xs) (h x)
- pieceAssoc :: (Associate k v xs, Extensible f p t) => Optic' p f (t h xs) (h (k :> v))
- itemAt :: (Wrapper h, Extensible f p t) => Membership xs x -> Optic' p f (t h xs) (Repr h x)
- item :: (Wrapper h, Extensible f p t, x ∈ xs) => proxy x -> Optic' p f (t h xs) (Repr h x)
- itemAssoc :: (Wrapper h, Extensible f p t, Associate k v xs) => proxy k -> Optic' p f (t h xs) (Repr h (k :> v))
- data Membership xs x
- mkMembership :: Int -> Q Exp
- class Member xs x where
- remember :: forall xs x r. Membership xs x -> (Member xs x => r) -> r
- type (∈) x xs = Member xs x
- type family FindType (x :: k) (xs :: [k]) :: [Nat] where ...
- class Generate xs where
- class (ForallF c xs, Generate xs) => Forall c xs where
- type family ForallF (c :: k -> Constraint) (xs :: [k]) :: Constraint where ...
- data Assoc k v = k :> v
- type (>:) = (:>)
- class Associate k v xs | k xs -> v where
- type family FindAssoc (key :: k) (xs :: [Assoc k v]) where ...
- type family Elaborate (key :: k) (xs :: [v]) :: Elaborated k v where ...
- data Elaborated k v
Class
class (Functor f, Profunctor p) => Extensible f p t where #
This class allows us to use pieceAt
for both sums and products.
Minimal complete definition
Methods
pieceAt :: Membership xs x -> Optic' p f (t h xs) (h x) #
Instances
(Corepresentable p, Comonad (Corep p), Functor f) => Extensible k f p ((:*) k) # | |
(Applicative f, Choice p) => Extensible k f p ((:|) k) # | |
(Functor f, Profunctor p) => Extensible k f p (Inextensible k) # | |
piece :: (x ∈ xs, Extensible f p t) => Optic' p f (t h xs) (h x) #
Accessor for an element.
pieceAssoc :: (Associate k v xs, Extensible f p t) => Optic' p f (t h xs) (h (k :> v)) #
Like piece
, but reckon membership from its key.
itemAt :: (Wrapper h, Extensible f p t) => Membership xs x -> Optic' p f (t h xs) (Repr h x) #
Access a specified element through a wrapper.
item :: (Wrapper h, Extensible f p t, x ∈ xs) => proxy x -> Optic' p f (t h xs) (Repr h x) #
Access an element through a wrapper.
itemAssoc :: (Wrapper h, Extensible f p t, Associate k v xs) => proxy k -> Optic' p f (t h xs) (Repr h (k :> v)) #
Access an element specified by the key type through a wrapper.
Membership
data Membership xs x #
The position of x
in the type level set xs
.
Instances
Eq (Membership k xs x) # | |
Ord (Membership k xs x) # | |
Show (Membership k xs x) # | |
mkMembership :: Int -> Q Exp #
Generates a Membership
that corresponds to the given ordinal (0-origin).
Member
remember :: forall xs x r. Membership xs x -> (Member xs x => r) -> r #
Remember that Member xs x
from Membership
.
Generation
Every type-level list is an instance of Generate
.
Minimal complete definition
Methods
henumerate :: (forall x. Membership xs x -> r -> r) -> r -> r #
Enumerate all possible Membership
s of xs
.
Count the number of memberships.
hgenerateList :: Applicative f => (forall x. Membership xs x -> f (h x)) -> f (HList h xs) #
Enumerate Membership
s and construct an HList
.
class (ForallF c xs, Generate xs) => Forall c xs where #
Every element in xs
satisfies c
Minimal complete definition
Methods
henumerateFor :: proxy c -> proxy' xs -> (forall x. c x => Membership xs x -> r -> r) -> r -> r #
Enumerate all possible Membership
s of xs
with an additional context.
hgenerateListFor :: Applicative f => proxy c -> (forall x. c x => Membership xs x -> f (h x)) -> f (HList h xs) #
type family ForallF (c :: k -> Constraint) (xs :: [k]) :: Constraint where ... #
Association
The kind of key-value pairs
Constructors
k :> v infix 0 |
class Associate k v xs | k xs -> v where #
is essentially identical to Associate
k v xs(k :> v) ∈ xs
, but the type v
is inferred from k
and xs
.
Minimal complete definition
Methods
association :: Membership xs (k :> v) #
Sugar
type family Elaborate (key :: k) (xs :: [v]) :: Elaborated k v where ... #