extensible-0.9.2: Extensible, efficient, optics-friendly data types and effects
Copyright(c) Fumiaki Kinoshita 2018
LicenseBSD3
MaintainerFumiaki Kinoshita <[email protected]>
Safe HaskellNone
LanguageHaskell2010

Data.Extensible.Inclusion

Description

 
Synopsis

Inclusion

type (⊆) (xs :: [k]) (ys :: [k]) = Include ys xs Source #

Unicode alias for Include

type Include (ys :: [k]) = Forall (Member ys) Source #

ys contains xs

inclusion :: forall {k} (xs :: [k]) (ys :: [k]). Include ys xs => xs :& Membership ys Source #

Reify the inclusion of type level sets.

shrink :: forall {k} (xs :: [k]) (ys :: [k]) (h :: k -> Type). xs ys => (ys :& h) -> xs :& h Source #

O(n) Select some elements.

spread :: forall {k} (xs :: [k]) (ys :: [k]) (h :: k -> Type). xs ys => (xs :/ h) -> ys :/ h Source #

O(1) Embed to a larger union.

Key-value

type IncludeAssoc (ys :: [Assoc k v]) = Forall (Associated ys) Source #

Similar to Include, but this focuses on keys.

class Associated' xs t => Associated (xs :: [Assoc k v]) (t :: Assoc k v) Source #

Associated xs (k ':> v) is equivalent to Associate k v xs

Minimal complete definition

getAssociation

Instances

Instances details
(Associated' xs t, t ~ (k2 ':> v2)) => Associated (xs :: [Assoc k1 v1]) (t :: Assoc k1 v1) Source # 
Instance details

Defined in Data.Extensible.Inclusion

Methods

getAssociation :: Membership xs t

type family Associated' (xs :: [Assoc k v]) (t :: Assoc k v) where ... Source #

Equations

Associated' (xs :: [Assoc k1 v1]) (k2 ':> v2 :: Assoc k1 v1) = Lookup xs k2 v2 

inclusionAssoc :: forall {k} {v} (xs :: [Assoc k v]) (ys :: [Assoc k v]). IncludeAssoc ys xs => xs :& Membership ys Source #

Reify the inclusion of type level sets.

shrinkAssoc :: forall {k} {v} (ys :: [Assoc k v]) (xs :: [Assoc k v]) (h :: Assoc k v -> Type). IncludeAssoc ys xs => (ys :& h) -> xs :& h Source #

O(n) Select some elements.

spreadAssoc :: forall {k} {v} (ys :: [Assoc k v]) (xs :: [Assoc k v]) (h :: Assoc k v -> Type). IncludeAssoc ys xs => (xs :/ h) -> ys :/ h Source #

O(1) Embed to a larger union.