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

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

Data.Extensible.Internal

Contents

Description

A bunch of combinators that contains magic

Synopsis

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 #

Semigroup (Membership k xs x) Source # 

Methods

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

sconcat :: NonEmpty (Membership k xs x) -> Membership k xs x #

stimes :: Integral b => b -> Membership k xs x -> Membership k xs x #

NFData (Membership k xs x) Source # 

Methods

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

Hashable (Membership k xs x) Source # 

Methods

hashWithSalt :: Int -> Membership k xs x -> Int #

hash :: Membership k xs x -> Int #

mkMembership :: Int -> Q Exp Source #

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

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

leadership :: Membership (y ': xs) x -> ((x :~: y) -> r) -> (Membership xs x -> r) -> r Source #

Embodies a type equivalence to ensure that the Membership points the first element.

impossibleMembership :: Membership '[] x -> r Source #

There is no Membership of an empty list.

here :: Membership (x ': xs) x Source #

The Membership points the first element

navNext :: Membership xs y -> Membership (x ': xs) y Source #

The next membership

Member class

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), KnownNat 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) = 0 ': FindType x xs 
FindType x (y ': ys) = MapSucc (FindType x ys) 
FindType x '[] = '[] 

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 0 k1 xs)) (Expecting k (Assoc Nat v) ((:>) Nat v n v1)), KnownNat n) => Associate v k k1 v1 xs Source # 

Methods

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

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

Equations

FindAssoc n k ((k :> v) ': xs) = (n :> v) ': FindAssoc (1 + n) k xs 
FindAssoc n k ((k' :> v) ': xs) = FindAssoc (1 + n) k xs 
FindAssoc n 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 

Miscellaneous

type family Head (xs :: [k]) :: k where ... Source #

Equations

Head (x ': xs) = x 

type family Last (x :: [k]) :: k where ... Source #

Equations

Last '[x] = x 
Last (x ': xs) = Last xs 

module Data.Proxy