data-accessor-0.1.1: Utilities for accessing and manipulating fields of records

Data.Accessor

Description

This module provides a simple abstract data type for a piece of a data stucture that can be read from and written to. In contrast to Data.Accessor.Basic it is intended for unqualified import.

Synopsis

Documentation

type Accessor s a = T s aSource

An Accessor s a is an object that encodes how to get and put a subject of type a out of/into an object of type s.

In order for an instance of this data structure a to be an Accessor, it must obey the following laws:

 getVal a (setVal a x s) = x
 setVal a (getVal a s) s = s

accessorSource

Arguments

:: (s -> a)

get method

-> (a -> s -> s)

set method

-> Accessor s a 

Construct an Accessor from a get and a set method.

setValSource

Arguments

:: Accessor s a

record field f

-> a

value x to be set

-> s

original record

-> s

new record with field f changed to x

Set a value of a record field that is specified by an Accessor

getValSource

Arguments

:: Accessor s a

record field

-> s

record

-> a

value of the field in the record

Get a value from a record field that is specified by an Accessor

getA :: MonadState s m => Accessor s a -> m aSource

A structural dereference function for state monads.

putA :: MonadState s m => Accessor s a -> a -> m ()Source

A structural assignment function for state monads.

(=:) :: MonadState s m => Accessor s a -> a -> m ()Source

An "assignment operator" for state monads.

 (=:) = putA

modA :: MonadState s m => Accessor s a -> (a -> a) -> m ()Source

A structural modification function for state monads.

(.>) :: Accessor a b -> Accessor b c -> Accessor a cSource

Accessor composition: Combine an accessor with an accessor to a sub-field. Speak "stack".

(<.) :: Accessor b c -> Accessor a b -> Accessor a cSource

Accessor composition the other direction.

 (<.) = flip (.>)