Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
An interface with references that can be used internally while generating instances
for MMorph
and tuple lens classes.
Only the public parts of Control.Reference.Representation are exported.
For creating a new interface with different generated elements, use this internal interface.
- type Simple t s a = t s s a a
- data Reference w r s t a b
- reference :: (Functor w, Applicative w, Monad w, Functor r, Applicative r, Monad r) => (s -> r a) -> (b -> s -> w t) -> ((a -> w b) -> s -> w t) -> Reference w r s t a b
- referenceWithClose :: (Functor w, Applicative w, Monad w, Functor r, Applicative r, Monad r) => (s -> r a) -> (s -> r ()) -> (b -> s -> w t) -> (s -> w ()) -> ((a -> w b) -> s -> w t) -> (s -> w ()) -> Reference w r s t a b
- type Lens s t a b = forall w r. RefMonads w r => Reference w r s t a b
- type Partial s t a b = forall w r. (Functor w, Applicative w, Monad w, Functor r, Applicative r, MonadPlus r, MMorph Maybe r) => Reference w r s t a b
- type Traversal s t a b = forall w r. (RefMonads w r, MonadPlus r, MMorph [] r) => Reference w r s t a b
- type Lens' = Reference Identity Identity
- type Partial' = Reference Identity Maybe
- type Traversal' = Reference Identity []
- type IOLens s t a b = forall w r. (RefMonads w r, MMorph IO w, MMorph IO r) => Reference w r s t a b
- type IOPartial s t a b = forall w r. (RefMonads w r, MMorph IO w, MonadPlus r, MMorph IO r, MMorph Maybe r) => Reference w r s t a b
- type IOTraversal s t a b = forall w r. (RefMonads w r, MMorph IO w, MonadPlus r, MMorph IO r, MMorph [] r) => Reference w r s t a b
- type IOLens' = Reference IO IO
- type IOPartial' = Reference IO (MaybeT IO)
- type IOTraversal' = Reference IO (ListT IO)
- type StateLens st m s t a b = forall w r. (RefMonads w r, MMorph (StateT st m) w, MMorph (StateT st m) r) => Reference w r s t a b
- type StatePartial st m s t a b = forall w r. (RefMonads w r, MMorph (StateT st m) w, MonadPlus r, MMorph Maybe r, MMorph (StateT st m) r) => Reference w r s t a b
- type StateTraversal st m s t a b = forall w r. (RefMonads w r, MMorph (StateT st m) w, MonadPlus r, MMorph [] r, MMorph (StateT st m) r) => Reference w r s t a b
- type StateLens' s m = Reference (StateT s m) (StateT s m)
- type StatePartial' s m = Reference (StateT s m) (MaybeT (StateT s m))
- type StateTraversal' s m = Reference (StateT s m) (ListT (StateT s m))
- type WriterLens st m s t a b = forall w r. (RefMonads w r, MMorph (WriterT st m) w, MMorph (WriterT st m) r) => Reference w r s t a b
- type WriterPartial st m s t a b = forall w r. (RefMonads w r, MMorph (WriterT st m) w, MonadPlus r, MMorph Maybe r, MMorph (WriterT st m) r) => Reference w r s t a b
- type WriterTraversal st m s t a b = forall w r. (RefMonads w r, MMorph (WriterT st m) w, MonadPlus r, MMorph [] r, MMorph (WriterT st m) r) => Reference w r s t a b
- type WriterLens' s m = Reference (WriterT s m) (WriterT s m)
- type WriterPartial' s m = Reference (WriterT s m) (MaybeT (WriterT s m))
- type WriterTraversal' s m = Reference (WriterT s m) (ListT (WriterT s m))
- class MMorph m1 m2 where
- morph :: m1 a -> m2 a
- module Control.Reference.Operators
- module Control.Reference.Predefined
Documentation
type Simple t s a = t s s a a
data Reference w r s t a b
A reference is an accessor to a part or different view of some data. The referenc has a separate getter, setter and updater. In some cases, the semantics are a bit different
Reference laws
As the references are generalizations of lenses, they should conform to the lens laws:
1) You get back what you put in:
refSet
l a s >>=refGet
l return ≡ a
2) Putting back what you got doesn't change anything:
refGet
l return a >>= \b ->refSet
l b s ≡ s
3) Setting twice is the same as setting once:
refSet
l a s >>=refSet
l b ≡refSet
l b s
But because update, set and get are different operations, .
4) Updating something is the same as getting and then setting (if the reader and writer monads are the same, or one can be converted into the other):
refGet
l a >>= f >>= \b ->refSet
l b s ≡refUpdate
l f s
This has some consequences. For example lensUpdate l id = return
.
Type arguments of Reference
w
- Writer monad, controls how the value can be reassembled when the part is changed.
See differences between
Lens
,IOLens
andStateLens
r
- Reader monad. Controls how part of the value can be asked.
See differences between
Lens
,Partial
andTraversal
s
- The type of the original context.
t
- The after replacing the accessed part to something of type
b
the type of the context changes tot
. a
- The type of the accessed part.
b
- The accessed part can be changed to something of this type.
Usually s
and b
determines t
, t
and a
determines s
.
The reader monad usually have more information (MMorph
).
w
r
:: (Functor w, Applicative w, Monad w, Functor r, Applicative r, Monad r) | |
=> (s -> r a) | Getter |
-> (b -> s -> w t) | Setter |
-> ((a -> w b) -> s -> w t) | Updater |
-> Reference w r s t a b |
Creates a reference.
:: (Functor w, Applicative w, Monad w, Functor r, Applicative r, Monad r) | |
=> (s -> r a) | Getter |
-> (s -> r ()) | Close after getting |
-> (b -> s -> w t) | Setter |
-> (s -> w ()) | Close after setting |
-> ((a -> w b) -> s -> w t) | Updater |
-> (s -> w ()) | Close after updating |
-> Reference w r s t a b |
Creates a reference with explicit close operations that are executed after the data is accessed.
type Partial s t a b = forall w r. (Functor w, Applicative w, Monad w, Functor r, Applicative r, MonadPlus r, MMorph Maybe r) => Reference w r s t a b
type Traversal s t a b = forall w r. (RefMonads w r, MonadPlus r, MMorph [] r) => Reference w r s t a b
A reference that can access data that is available in a number of instances inside the contexts.
Any reference that is a Traversal
should perform the action given to its
updater in the exactly the same number of times that is the number of the values
returned by it's getRef
function.
type Lens' = Reference Identity Identity
Strict lens. A Reference
that must access a part of data that surely exists
in the context.
type Partial' = Reference Identity Maybe
Strict partial lens. A Reference
that must access data that may not exist
in the context.
type Traversal' = Reference Identity []
Strict traversal. A reference that must access data that is available in a number of instances inside the context.
type IOLens s t a b = forall w r. (RefMonads w r, MMorph IO w, MMorph IO r) => Reference w r s t a b
A reference that can access mutable data.
type IOPartial s t a b = forall w r. (RefMonads w r, MMorph IO w, MonadPlus r, MMorph IO r, MMorph Maybe r) => Reference w r s t a b
A reference that can access mutable data that may not exist in the context.
type IOTraversal s t a b = forall w r. (RefMonads w r, MMorph IO w, MonadPlus r, MMorph IO r, MMorph [] r) => Reference w r s t a b
type IOLens' = Reference IO IO
A reference that must access mutable data that is available in the context.
type IOPartial' = Reference IO (MaybeT IO)
A reference that must access mutable data that may not exist in the context.
type IOTraversal' = Reference IO (ListT IO)
A reference that can access mutable data that is available in a number of instances inside the contexts.
type StateLens st m s t a b = forall w r. (RefMonads w r, MMorph (StateT st m) w, MMorph (StateT st m) r) => Reference w r s t a b
A reference that can access a value inside a StateT
transformed monad.
type StatePartial st m s t a b = forall w r. (RefMonads w r, MMorph (StateT st m) w, MonadPlus r, MMorph Maybe r, MMorph (StateT st m) r) => Reference w r s t a b
A reference that can access a value inside a StateT
transformed monad
that may not exist.
type StateTraversal st m s t a b = forall w r. (RefMonads w r, MMorph (StateT st m) w, MonadPlus r, MMorph [] r, MMorph (StateT st m) r) => Reference w r s t a b
A reference that can access a value inside a StateT
transformed monad
that may exist in multiple instances.
type StateLens' s m = Reference (StateT s m) (StateT s m)
A reference that must access a value inside a StateT
transformed monad.
type StatePartial' s m = Reference (StateT s m) (MaybeT (StateT s m))
A reference that must access a value inside a StateT
transformed monad
that may not exist.
type StateTraversal' s m = Reference (StateT s m) (ListT (StateT s m))
A reference that must access a value inside a StateT
transformed monad
that may exist in multiple instances.
type WriterLens st m s t a b = forall w r. (RefMonads w r, MMorph (WriterT st m) w, MMorph (WriterT st m) r) => Reference w r s t a b
A reference that can access a value inside a WriterT
transformed monad.
type WriterPartial st m s t a b = forall w r. (RefMonads w r, MMorph (WriterT st m) w, MonadPlus r, MMorph Maybe r, MMorph (WriterT st m) r) => Reference w r s t a b
A reference that can access a value inside a WriterT
transformed monad
that may not exist.
type WriterTraversal st m s t a b = forall w r. (RefMonads w r, MMorph (WriterT st m) w, MonadPlus r, MMorph [] r, MMorph (WriterT st m) r) => Reference w r s t a b
A reference that can access a value inside a WriteT
transformed monad
that may exist in multiple instances.
type WriterLens' s m = Reference (WriterT s m) (WriterT s m)
A reference that must access a value inside a WriterT
transformed monad.
type WriterPartial' s m = Reference (WriterT s m) (MaybeT (WriterT s m))
A reference that must access a value inside a WriteT
transformed monad
that may not exist.
type WriterTraversal' s m = Reference (WriterT s m) (ListT (WriterT s m))
A reference that must access a value inside a WriteT
transformed monad
that may exist in multiple instances.
class MMorph m1 m2 where
States that m1
can be represented with m2
.
That is because m2
contains more infromation than m1
.
The MMorph
relation defines a natural transformation from m1
to m2
that keeps the following laws:
morph (return x) = return x morph (m >>= f) = morph m >>= morph . f
It is a reflexive and transitive relation.
morph :: m1 a -> m2 a
Lifts the first monad into the second.
MMorph [] [] | |
MMorph IO IO | |
MMorph Maybe [] | |
MMorph Maybe Maybe | |
MMorph Identity [] | |
MMorph Identity IO | |
MMorph Identity Maybe | |
MMorph Identity Identity | |
MMorph [] (ListT IO) | |
MMorph [] (ListT (StateT s Q)) | |
MMorph IO (ListT IO) | |
MMorph IO (MaybeT IO) | |
MMorph Maybe (ListT IO) | |
MMorph Maybe (MaybeT IO) | |
MMorph Identity (ListT IO) | |
MMorph Identity (MaybeT IO) | |
MMorph (ListT IO) (ListT IO) | |
MMorph (MaybeT IO) (ListT IO) | |
MMorph (MaybeT IO) (MaybeT IO) | |
Monad m => MMorph (StateT s m) (ListT (StateT s m)) |
module Control.Reference.Operators
module Control.Reference.Predefined