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

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

Data.Extensible.Inclusion

Contents

Description

 

Synopsis

Inclusion

type (⊆) xs ys = Include ys xs Source #

Unicode alias for Include

type Include ys = Forall (Member ys) Source #

ys contains xs

inclusion :: forall xs ys. Include ys xs => Membership ys :* xs Source #

Reify the inclusion of type level sets.

shrink :: xs ys => (h :* ys) -> h :* xs Source #

O(n) Select some elements.

spread :: xs ys => (h :| xs) -> h :| ys Source #

O(1) Embed to a larger union.

Key-value

type IncludeAssoc ys = Forall (Associated ys) Source #

Similar to Include, but this focuses on keys.

class Associated' xs t => Associated xs t Source #

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

Minimal complete definition

getAssociation

Instances

(Associated' k v xs t, (~) (Assoc k v) t ((:>) k v k1 v1)) => Associated k v xs t Source # 

Methods

getAssociation :: Membership (Assoc xs t) xs t

inclusionAssoc :: forall xs ys. IncludeAssoc ys xs => Membership ys :* xs Source #

Reify the inclusion of type level sets.

shrinkAssoc :: IncludeAssoc ys xs => (h :* ys) -> h :* xs Source #

O(n) Select some elements.

spreadAssoc :: IncludeAssoc ys xs => (h :| xs) -> h :| ys Source #

O(1) Embed to a larger union.