Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data NMap :: [Mapping s Type] -> Type where
- unionMap :: forall s (xs :: [Mapping s *]) (ys :: [Mapping s *]). (SingI xs, SingI ys, SOrd s) => (NMap xs, NMap ys) -> NMap (Union xs ys)
- ununionMap :: forall s (xs :: [Mapping s *]) (ys :: [Mapping s *]). (SingI xs, SingI ys, SOrd s) => NMap (Union xs ys) -> (NMap xs, NMap ys)
- module Data.NamedSOP.Type
Documentation
data NMap :: [Mapping s Type] -> Type where Source #
A depedently-typed product, or map. The following are roughly equivalent:
type A = NMap '[ "a" ':-> Int, "b" ':-> Bool ] data A = A { a :: Int, b :: Bool }
Instances
(Eq v, Eq (NMap xs)) => Eq (NMap ((k :-> v) ': xs)) Source # | |
Eq (NMap ([] :: [Mapping s Type])) Source # | |
(Ord v, Ord (NMap xs)) => Ord (NMap ((k :-> v) ': xs)) Source # | |
Defined in Data.NamedSOP.Map compare :: NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) -> Ordering # (<) :: NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) -> Bool # (<=) :: NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) -> Bool # (>) :: NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) -> Bool # (>=) :: NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) -> Bool # max :: NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) # min :: NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) -> NMap ((k :-> v) ': xs) # | |
Ord (NMap ([] :: [Mapping s Type])) Source # | |
ShowMap xs => Show (NMap xs) Source # | |
unionMap :: forall s (xs :: [Mapping s *]) (ys :: [Mapping s *]). (SingI xs, SingI ys, SOrd s) => (NMap xs, NMap ys) -> NMap (Union xs ys) Source #
Combine two NMap
s in a way such that the original ordering of
their fields doesn't matter; no matter how you combine smaller maps
to create a large one, you are guaranteed to have a sorted NMap
when you finish.
NMap
s form a commutative monoid under unionMap
, with
NMapEmpty
as the identity.
This function takes a tuple as an argument so that it is symmetric
with ununionMap
.
ununionMap :: forall s (xs :: [Mapping s *]) (ys :: [Mapping s *]). (SingI xs, SingI ys, SOrd s) => NMap (Union xs ys) -> (NMap xs, NMap ys) Source #
Split a sorted NMap
into two arbitrary (and potentially
unsorted) submaps. Conveniently select the submaps to split into
using -XTypeApplications
. (Note the empty type argument for the
key kind).
>>>
m :: NMap '[ "a" ':-> Int, "b" ':-> Bool, "c" ':-> String ]
>>>
m = NMapExt 1 (NMapExt True (NMapExt "hello" NMapEmpty))
>>>
ununionMap @_ @'[ "b" ':-> Bool, "a" ':-> Int ] @'[ "c" ':-> String ] m
({ b :-> True, a :-> 1 },{ c :-> "hello" })
module Data.NamedSOP.Type