putlenses-0.1.3: Put-based lens library

Copyright(C) 2013 Hugo Pacheco
LicenseBSD-style (see the file LICENSE)
MaintainerHugo Pacheco <hpacheco@nii.ac.jp>
Stabilityprovisional
Safe HaskellNone
LanguageHaskell98

Generics.Putlenses.Putlens

Description

General framework for put-based lenses.

Synopsis

Documentation

newtype GetPut Source

Constructors

GetPut Bool 

newtype PutGet Source

Constructors

PutGet Bool 

Instances

data LensM m s v Source

Interface for normal lenses

Constructors

LensM 

Fields

get :: s -> v
 
put :: s -> v -> m s
 
create :: v -> m s
 

type Lens s v = LensM Identity s v Source

Interface for lenses without monadic effects

simpleput :: Lens s v -> s -> v -> s Source

Non-monadic put function

simplecreate :: Lens s v -> v -> s Source

Non-monadic create function

type PutM m a = ReaderT GetPut (WriterT PutGet m) a Source

Monad for put-based lenses includes an environment, state, and boolean tags that our system will use to ensure GetPut and PutGet

type Get s v = s -> Maybe v Source

type Put m s v = Maybe s -> v -> PutM m s Source

type Create m s v = v -> PutM m s Source

data PutlensM m s v Source

Framework for put-based lenses

Constructors

PutlensM 

Fields

getputM :: s -> (Maybe v, Create m s v)
 
createM :: Create m s v
 

type PutlensMaybeM m s v = PutlensM (MaybeT m) s v Source

type PutlensReaderM m e s v = PutlensM (ReaderT e m) s v Source

type PutlensStateM m st s v = PutlensM (StateT st m) s v Source

mapPutM' :: (Monad m, Monad n) => (m a -> n b) -> (forall c. m c -> n c) -> PutM m a -> PutM n b Source

Changes the resulting monad of a put computation

mapPutM :: (forall a. m a -> n a) -> PutM m a -> PutM n a Source

mapPutlensM :: Monad m => (forall a. m a -> n a) -> PutlensM m s v -> PutlensM n s v Source

Changes the resulting monad of a putlens

liftPutM :: Monad m => m s -> PutM m s Source

Lifts a function on a given monad to a put computation

liftPutlensM :: (MonadTrans t, Monad m) => PutlensM m s v -> PutlensM (t m) s v Source

Function lift applied to the monadic argument of a putlens

getM :: PutlensM m s v -> Get s v Source

Forward |get| function

dom :: PutlensM m s v -> s -> Bool Source

Domain of a putlens (the domains of its get function)

putM :: PutlensM m s v -> Put m s v Source

Backward |put| function

evalPutM :: Monad m => PutM m s -> GetPut -> m s Source

Runs a putlens for a particular environment

runPutM :: Monad m => PutM m s -> GetPut -> m (s, PutGet) Source

lens2put :: Monad m => LensM m s v -> PutlensM m s v Source

Converts a normal lens to a putlens (without explicit failure)

simplelens2put :: Monad m => Lens' s v -> PutlensM m s v Source

Converts a simple lens of the Haskell lens package into a putlens

put2lens :: Eq v => Putlens s v -> Lens s v Source

Converts a putlens to a normal lens, enforcing well-behavedness

put2quicklens :: Eq v => Putlens s v -> Lens s v Source

Converts a putlens to a normal lens but without enforcing PutGet (for unsafe casts)

put2quicklensNoGetPut :: Eq v => Putlens s v -> Lens s v Source

Converts a putlens to a normal lens, without enforcing GetPut

put2lensNoGetPut :: Eq v => Putlens s v -> Lens s v Source

Converts a putlens to a normal lens, without enforcing GetPut

put2lensM :: (Monad m, Eq v) => PutlensM m s v -> LensM m s v Source

Converts a monadic putlens to a monadic lens, enforcing well-behavedness

put2quicklensM :: (Monad m, Eq v) => PutlensM m s v -> LensM m s v Source

Converts a monadic putlens to a monadic lens but without enforcing PutGet (for unsafe casts)

put2lensNoGetPutM :: (Monad m, Eq v) => PutlensM m s v -> LensM m s v Source

Converts a monadic putlens to a monadic lens, without enforcing GetPut

put2quicklensNoGetPutM :: (Monad m, Eq v) => PutlensM m s v -> LensM m s v Source

Converts a monadic putlens to a monadic lens, without enforcing GetPut

put2lensM' :: (Monad m, Eq v) => Bool -> Bool -> PutlensM m s v -> LensM m s v Source

Converts a putlens to a normal lens with a parameter telling to ensure well-behavedness or not (for unsafe casts) Initializes the environment as the original source, the state as empty, the GetPut tag as True and the PutGet tag as False

get' :: Eq v => PutlensM m s v -> s -> v Source

The get function of a putlens

put' :: (Monad m, Eq v) => Bool -> Bool -> PutlensM m s v -> s -> v -> m s Source

getput' :: (Monad m, Eq v) => Bool -> Bool -> PutlensM m s v -> s -> (v, v -> m s) Source

The tupled get/put function of a putlens (with PutGet and GetPut flags)

create' :: (Monad m, Eq v) => Bool -> PutlensM m s v -> v -> m s Source

The create function of a putlens (with PutGet flag)

put2create :: (Monad m, Eq v) => PutlensM m s v -> PutlensM m s v Source

Converts a putlens into another putlens that only uses the create function

checkGetPut :: (Monad m, Eq v) => PutlensM m s v -> PutlensM m s v Source

checkPutGet :: Monad m => PutlensM m s v -> PutlensM m s v Source

offGetPut :: Monad m => PutM m s -> PutM m s Source

onPutGet :: Monad m => PutM m s -> PutM m s Source