Copyright | (c) Andrey Mulik 2020-2021 |
---|---|
License | BSD-style |
Maintainer | work.a.mulik@gmail.com |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Data.Field
provides immutable field type for record-style operations.
Synopsis
- data Field m record a = Field {
- getField :: !(GetterFor m record a)
- setField :: !(SetterFor m record a)
- modifyField :: !(ModifierFor m record a)
- modifyFieldM :: !(ModifierMFor m record a)
- sfield :: Monad m => GetterFor m record a -> SetterFor m record a -> Field m record a
- type GetterFor m record a = record -> m a
- type SetterFor m record a = record -> a -> m ()
- type ModifierFor m record a = record -> (a -> a) -> m a
- type ModifierMFor m record a = record -> (a -> m a) -> m a
- class (Monad m, MonadVar m) => IsMVar m var where
- class (Monad m, IsMVar m (Var m)) => MonadVar m where
Field
data Field m record a Source #
Normal field, which contain getter, setter and modifier.
Since fmr-0.2
, you can also combine fmr fields using (
and .
)
from
the id
Category
class:
outer :: (Monad m) => Field m outer inner inner :: (Monad m) => Field m inner value field :: (Monad m) => Field m outer value field = outer.inner
Field | |
|
sfield :: Monad m => GetterFor m record a -> SetterFor m record a -> Field m record a Source #
sfield
creates new field from given getter and setter.
type ModifierFor m record a = record -> (a -> a) -> m a Source #
Modifier type.
type ModifierMFor m record a = record -> (a -> m a) -> m a Source #
Monadic modifier type.
IsMVar and MonadVar
class (Monad m, MonadVar m) => IsMVar m var where Source #
The IsMVar
class provides this
field for entire record access.
Please note that you cannot create IsMVar
and MonadVar
instances for some
monad separately.
this :: Field m (var a) a Source #
this
is common variable access field.
var :: a -> m (var a) Source #
Create and initialize new mutable variable.
class (Monad m, IsMVar m (Var m)) => MonadVar m Source #
MonadVar
is a class of monads for which defined at least one type of mutable
variable.
Note that a variable of type (Var m)
should be as simple possible for a
given monad. I only has to implement the basic operations triad: read,
write and update (which don't have to be atomic).