Safe Haskell | None |
---|---|
Language | Haskell98 |
- data Writer (w :: [Mapping Symbol *]) a = Writer {}
- data Symbol :: *
- put :: Var v -> a -> Writer '[v :-> a] ()
- data Mapping k v :: * -> * -> * = k :-> v
- type IsMap k v (s :: [Mapping k v]) = (~) [Mapping k v] s (Nub k v (Sort (Mapping k v) s))
- data Map (n :: [Mapping Symbol *]) :: [Mapping Symbol *] -> * where
- union :: Unionable s t => Map s -> Map t -> Map (Union Symbol * s t)
- data Var (k :: Symbol) :: Symbol -> * = Var
- type Union k v (m :: [Mapping k v]) (n :: [Mapping k v]) = Nub k v (Sort (Mapping k v) ((:++) (Mapping k v) m n))
- type Unionable (s :: [Mapping Symbol *]) (t :: [Mapping Symbol *]) = (Nubable (Sort (Mapping Symbol *) ((:++) (Mapping Symbol *) s t)), Sortable ((:++) (Mapping Symbol *) s t))
Documentation
data Writer (w :: [Mapping Symbol *]) a Source #
Provides an effect-parameterised version of the writer monad. Effects are maps of variable-type pairs, providing an effect system for writer effects.
(Kind) This is the kind of type-level symbols. Declared here because class IP needs it
data Mapping k v :: * -> * -> * #
A key-value pair
k :-> v infixr 4 |
type IsMap k v (s :: [Mapping k v]) = (~) [Mapping k v] s (Nub k v (Sort (Mapping k v) s)) #
Predicate to check if in normalised map form
data Map (n :: [Mapping Symbol *]) :: [Mapping Symbol *] -> * where #
A value-level heterogenously-typed Map (with type-level representation in terms of lists)
(KnownSymbol k, Eq (Var k), Eq v, Eq (Map s)) => Eq (Map ((:) (Mapping Symbol *) ((:->) Symbol * k v) s)) | |
Eq (Map ([] (Mapping Symbol *))) | |
(KnownSymbol k, Show v, Show' (Map s)) => Show (Map ((:) (Mapping Symbol *) ((:->) Symbol * k v) s)) | |
Show (Map ([] (Mapping Symbol *))) | |
(KnownSymbol k, Show v, Show' (Map s)) => Show' (Map ((:) (Mapping Symbol *) ((:->) Symbol * k v) s)) | |
Show' (Map ([] (Mapping Symbol *))) | |
union :: Unionable s t => Map s -> Map t -> Map (Union Symbol * s t) #
Union of two finite maps (normalising)
data Var (k :: Symbol) :: Symbol -> * #
Pair a symbol (representing a variable) with a type
KnownSymbol k => Show (Var k) | |
type Union k v (m :: [Mapping k v]) (n :: [Mapping k v]) = Nub k v (Sort (Mapping k v) ((:++) (Mapping k v) m n)) #
Union of two finite maps
type Unionable (s :: [Mapping Symbol *]) (t :: [Mapping Symbol *]) = (Nubable (Sort (Mapping Symbol *) ((:++) (Mapping Symbol *) s t)), Sortable ((:++) (Mapping Symbol *) s t)) #