Copyright | (c) Fumiaki Kinoshita 2018 |
---|---|
License | BSD3 |
Maintainer | Fumiaki Kinoshita <[email protected]> |
Safe Haskell | None |
Language | Haskell2010 |
Data.Extensible.Inclusion
Description
Synopsis
- type (⊆) (xs :: [k]) (ys :: [k]) = Include ys xs
- type Include (ys :: [k]) = Forall (Member ys)
- inclusion :: forall {k} (xs :: [k]) (ys :: [k]). Include ys xs => xs :& Membership ys
- shrink :: forall {k} (xs :: [k]) (ys :: [k]) (h :: k -> Type). xs ⊆ ys => (ys :& h) -> xs :& h
- spread :: forall {k} (xs :: [k]) (ys :: [k]) (h :: k -> Type). xs ⊆ ys => (xs :/ h) -> ys :/ h
- type IncludeAssoc (ys :: [Assoc k v]) = Forall (Associated ys)
- class Associated' xs t => Associated (xs :: [Assoc k v]) (t :: Assoc k v)
- type family Associated' (xs :: [Assoc k v]) (t :: Assoc k v) where ...
- inclusionAssoc :: forall {k} {v} (xs :: [Assoc k v]) (ys :: [Assoc k v]). IncludeAssoc ys xs => xs :& Membership ys
- shrinkAssoc :: forall {k} {v} (ys :: [Assoc k v]) (xs :: [Assoc k v]) (h :: Assoc k v -> Type). IncludeAssoc ys xs => (ys :& h) -> xs :& h
- spreadAssoc :: forall {k} {v} (ys :: [Assoc k v]) (xs :: [Assoc k v]) (h :: Assoc k v -> Type). IncludeAssoc ys xs => (xs :/ h) -> ys :/ h
Inclusion
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 #
is equivalent to Associated
xs (k ':> v)Associate
k v xs
Minimal complete definition
getAssociation
Instances
(Associated' xs t, t ~ (k2 ':> v2)) => Associated (xs :: [Assoc k1 v1]) (t :: Assoc k1 v1) Source # | |
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.