Safe Haskell | Safe-Inferred |
---|
- type Ref m a = MLens m () a
- readRef :: Monad m => MLens m () a -> m a
- writeRef :: Monad m => Ref m a -> a -> m ()
- modRef :: Monad m => Ref m a -> (a -> a) -> m ()
- fileRef :: FilePath -> IO (Ref IO String)
- fileRef_ :: FilePath -> IO (Ref IO (Maybe String))
- logConsoleLens :: Show a => MLens IO a a
- logMLens :: Monad m => (a -> m ()) -> (a -> m ()) -> MLens m a a
- logFile :: FilePath -> IO (String -> IO ())
Data type for reference lenses
type Ref m a = MLens m () aSource
Note that references lenses can be composed with lenses. For example, if
r :: Ref m (a,b)
then
fstLens . r :: Ref m a
Reference laws for pure references:
-
(readRef r)
has no side effect -
(readRef r >>= writeRef r)
===(return ())
-
(writeRef r a >> readRef r)
===(return a)
-
(writeRef r a >> writeRef r a')
===(writeRef r a')
- Reference laws need not be preserved by composition, but they should be preserved if a pure lens is composed from the left.
These first four laws are equivalent to the get-no-effect, set-get, get-set and set-set laws for monadic lenses.
Reference operations
Some impure IO
referenceses
fileRef :: FilePath -> IO (Ref IO String)Source
Using fileRef
is safe if the file is not used concurrently.
fileRef_ :: FilePath -> IO (Ref IO (Maybe String))Source
Note that if you write Nothing
, the file is deleted.
logConsoleLens :: Show a => MLens IO a aSource
logConsoleLens
logs elementary get and set operations.
Note that with the current representation of MLens
, every set operation involves a get operation.