extensible-0.4: Extensible, efficient, optics-friendly data types and effects

Copyright(c) Fumiaki Kinoshita 2017
LicenseBSD3
MaintainerFumiaki Kinoshita <fumiexcel@gmail.com>
Safe HaskellSafe
LanguageHaskell2010

Data.Extensible.Class

Contents

Description

 

Synopsis

Class

class (Functor f, Profunctor p) => Extensible f p t where Source #

This class allows us to use pieceAt for both sums and products.

Minimal complete definition

pieceAt

Methods

pieceAt :: Membership xs x -> Optic' p f (t h xs) (h x) Source #

Instances

(Corepresentable p, Comonad (Corep p), Functor f) => Extensible k f p ((:*) k) Source # 

Methods

pieceAt :: Membership f xs x -> Optic' * * ((:*) k) p (t h xs) (h x) Source #

(Applicative f, Choice p) => Extensible k f p ((:|) k) Source # 

Methods

pieceAt :: Membership f xs x -> Optic' * * ((:|) k) p (t h xs) (h x) Source #

(Functor f, Profunctor p) => Extensible k f p (Inextensible k) Source # 

Methods

pieceAt :: Membership f xs x -> Optic' * * (Inextensible k) p (t h xs) (h x) Source #

piece :: (x xs, Extensible f p t) => Optic' p f (t h xs) (h x) Source #

Accessor for an element.

pieceAssoc :: (Associate k v xs, Extensible f p t) => Optic' p f (t h xs) (h (k :> v)) Source #

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) Source #

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) Source #

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)) Source #

Access an element specified by the key type through a wrapper.

Membership

data Membership xs x Source #

The position of x in the type level set xs.

Instances

Eq (Membership k xs x) Source # 

Methods

(==) :: Membership k xs x -> Membership k xs x -> Bool #

(/=) :: Membership k xs x -> Membership k xs x -> Bool #

Ord (Membership k xs x) Source # 

Methods

compare :: Membership k xs x -> Membership k xs x -> Ordering #

(<) :: Membership k xs x -> Membership k xs x -> Bool #

(<=) :: Membership k xs x -> Membership k xs x -> Bool #

(>) :: Membership k xs x -> Membership k xs x -> Bool #

(>=) :: Membership k xs x -> Membership k xs x -> Bool #

max :: Membership k xs x -> Membership k xs x -> Membership k xs x #

min :: Membership k xs x -> Membership k xs x -> Membership k xs x #

Show (Membership k xs x) Source # 

Methods

showsPrec :: Int -> Membership k xs x -> ShowS #

show :: Membership k xs x -> String #

showList :: [Membership k xs x] -> ShowS #

mkMembership :: Int -> Q Exp Source #

Generates a Membership that corresponds to the given ordinal (0-origin).

Member

class Member xs x where Source #

x is a member of xs

Minimal complete definition

membership

Methods

membership :: Membership xs x Source #

Instances

((~) (Elaborated k Nat) (Elaborate Nat k x (FindType k x xs)) (Expecting k Nat pos), KnownPosition Nat pos) => Member k xs x Source # 

Methods

membership :: Membership xs x x Source #

remember :: forall xs x r. Membership xs x -> (Member xs x => r) -> r Source #

Remember that Member xs x from Membership.

type (∈) x xs = Member xs x Source #

Unicode flipped alias for Member

type family FindType (x :: k) (xs :: [k]) :: [Nat] where ... Source #

FindType types

Equations

FindType x (x ': xs) = Zero ': FindType x xs 
FindType x (y ': ys) = MapSucc (FindType x ys) 
FindType x '[] = '[] 

Generation

class Generate xs where Source #

Every type-level list is an instance of Generate.

Minimal complete definition

henumerate, hcount, hgenerateList

Methods

henumerate :: (forall x. Membership xs x -> r -> r) -> r -> r Source #

Enumerate all possible Memberships of xs.

hcount :: proxy xs -> Int Source #

Count the number of memberships.

hgenerateList :: Applicative f => (forall x. Membership xs x -> f (h x)) -> f (HList h xs) Source #

Enumerate Memberships and construct an HList.

Instances

Generate k ([] k) Source # 

Methods

henumerate :: (forall x. Membership [k] xs x -> r -> r) -> r -> r Source #

hcount :: proxy xs -> Int Source #

hgenerateList :: Applicative f => (forall x. Membership [k] xs x -> f (h x)) -> f (HList [k] h xs) Source #

Generate k xs => Generate k ((:) k x xs) Source # 

Methods

henumerate :: (forall a. Membership ((k ': x) xs) xs a -> r -> r) -> r -> r Source #

hcount :: proxy xs -> Int Source #

hgenerateList :: Applicative f => (forall a. Membership ((k ': x) xs) xs a -> f (h a)) -> f (HList ((k ': x) xs) h xs) Source #

class (ForallF c xs, Generate xs) => Forall c xs where Source #

Every element in xs satisfies c

Minimal complete definition

henumerateFor, hgenerateListFor

Methods

henumerateFor :: proxy c -> proxy' xs -> (forall x. c x => Membership xs x -> r -> r) -> r -> r Source #

Enumerate all possible Memberships 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) Source #

Instances

Forall k c ([] k) Source # 

Methods

henumerateFor :: proxy [k] -> proxy' xs -> (forall x. [k] x => Membership c xs x -> r -> r) -> r -> r Source #

hgenerateListFor :: Applicative f => proxy [k] -> (forall x. [k] x => Membership c xs x -> f (h x)) -> f (HList c h xs) Source #

(c x, Forall a c xs) => Forall a c ((:) a x xs) Source # 

Methods

henumerateFor :: proxy ((a ': x) xs) -> proxy' xs -> (forall b. (a ': x) xs b => Membership c xs b -> r -> r) -> r -> r Source #

hgenerateListFor :: Applicative f => proxy ((a ': x) xs) -> (forall b. (a ': x) xs b => Membership c xs b -> f (h b)) -> f (HList c h xs) Source #

type family ForallF (c :: k -> Constraint) (xs :: [k]) :: Constraint where ... Source #

Equations

ForallF c '[] = () 
ForallF c (x ': xs) = (c x, Forall c xs) 

Association

data Assoc k v Source #

The kind of key-value pairs

Constructors

k :> v infix 0 

Instances

Wrapper v h => Wrapper (Assoc k v) (Field k v h) Source # 

Associated Types

type Repr (Field k v h) (h :: Field k v h -> *) (v :: Field k v h) :: * Source #

Methods

_Wrapper :: (Functor f, Profunctor p) => Optic' * * p f (h v) (Repr (Field k v h) h v) Source #

type Repr (Assoc k v) (Field k v h) kv Source # 
type Repr (Assoc k v) (Field k v h) kv = Repr v h (AssocValue k v kv)

type (>:) = (:>) Source #

A synonym for (:>)

class Associate k v xs | k xs -> v where Source #

Associate k v xs is essentially identical to (k :> v) ∈ xs , but the type v is inferred from k and xs.

Minimal complete definition

association

Methods

association :: Membership xs (k :> v) Source #

Instances

((~) (Elaborated k (Assoc Nat v)) (Elaborate (Assoc Nat v) k k1 (FindAssoc v k k1 xs)) (Expecting k (Assoc Nat v) ((:>) Nat v n v1)), KnownPosition Nat n) => Associate v k k1 v1 xs Source # 

Methods

association :: Membership (Assoc v1 k1) xs ((v1 :> k1) xs v) Source #

type family FindAssoc (key :: k) (xs :: [Assoc k v]) where ... Source #

Equations

FindAssoc k ((k :> v) ': xs) = (Zero :> v) ': MapSuccKey (FindAssoc k xs) 
FindAssoc k ((k' :> v) ': xs) = MapSuccKey (FindAssoc k xs) 
FindAssoc k '[] = '[] 

Sugar

type family Elaborate (key :: k) (xs :: [v]) :: Elaborated k v where ... Source #

Equations

Elaborate k '[] = Missing k 
Elaborate k '[x] = Expecting x 
Elaborate k xs = Duplicate k 

data Elaborated k v Source #

A readable type search result

Constructors

Expecting v 
Missing k 
Duplicate k