Safe Haskell | Safe |
---|---|
Language | Haskell98 |
Operators to combine and transform references.
- (&) :: (Monad w, Monad r) => Reference w r w' r' s t c d -> Reference w r w' r' c d a b -> Reference w r w' r' s t a b
- (&+&) :: (RefMonads w r, RefMonads w' r', MonadPlus r, MonadPlus r', Morph [] r) => Reference w r w' r' s s a a -> Reference w r w' r' s s a a -> Reference w r w' r' s s a a
- (&|&) :: RefMonads m m' => Reference m m m' m' s t a b -> Reference m m m' m' s' t' a' b' -> Reference m m m' m' (s, s') (t, t') (a, a') (b, b')
- turn :: Reference w r w' r' s t a b -> Reference w' r' w r a b s t
Binary operators on references
(&) :: (Monad w, Monad r) => Reference w r w' r' s t c d -> Reference w r w' r' c d a b -> Reference w r w' r' s t a b infixl 6 Source #
Composes two references. They must be of the same kind.
If reference r
accesses b
inside the context a
, and reference p
accesses c
inside the context b
,
than the reference r&p
will access c
inside a
.
Composition is associative: (r&p)&q = r&(p&q)
(&+&) :: (RefMonads w r, RefMonads w' r', MonadPlus r, MonadPlus r', Morph [] r) => Reference w r w' r' s s a a -> Reference w r w' r' s s a a -> Reference w r w' r' s s a a infixl 5 Source #
Adds two references.
Using this operator may result in accessing the same parts of data multiple times.
For example twice = self &+& self
is a reference that accesses itself twice:
a ^? twice == [a,a] (twice *= x) a == x (twice .- f) a == f (f a)
Addition is commutative only if we do not consider the order of the results from a get, or the order in which monadic actions are performed.