packages feed

data-accessor-0.1.2: data-accessor.cabal

Name:             data-accessor
Version:          0.1.2
License:          GPL
License-File:     LICENSE
Author:           Henning Thielemann <haskell@henning-thielemann.de>, Luke Palmer <lrpalmer@gmail.com>
Maintainer:       Henning Thielemann <haskell@henning-thielemann.de>
Homepage:         http://code.haskell.org/data-accessor/
Category:         Data
-- Portability:      Haskell98, not quite because of MTL dependency
Build-Type:       Simple
Build-Depends:    base>=1.0, mtl
Synopsis:         Utilities for accessing and manipulating fields of records
Description:
  In Haskell 98 the name of a record field
  is automatically also the name of a function which gets the value
  of the according field.
  E.g. if we have
  .
    data Pair a b = Pair {first :: a, second :: b}
  .
  then
  .
  > first  :: Pair a b -> a
  > second :: Pair a b -> b
  .
  However for setting or modifying a field value
  we need to use some syntactic sugar, which is often clumsy.
  .
    modifyFirst :: (a -> a) -> (Pair a b -> Pair a b)
    modifyFirst f r\@(Pair {first=a}) = r{first = f a}
  .
  With this package you can define record field accessors
  which allow setting, getting and modifying values easily.
  The package clearly demonstrates the power of the functional approach:
  You can combine accessors of a record and sub-records,
  to make the access look like the fields of the sub-record belong to the main record.
  .
  Example:
  .
  > *Data.Accessor.Example> (first^:second^=10) (('b',7),"hallo")
  > (('b',10),"hallo")
  .
  You can easily manipulate record fields in a 'Control.Monad.State.State' monad,
  you can easily code Show instances that use the Accessor syntax
  and you can parse binary streams into records.
  See @Data.Accessor.Example@ for demonstration of all features.
  .
  It would be great if in revised Haskell versions the names of record fields
  are automatically 'Data.Accessor.Accessor's
  rather than plain @get@ functions.
  The package @data-accessor-template@ provides Template Haskell functions
  for automated generation of 'Data.Acesssor.Accessor's.
GHC-Options:      -Wall
Tested-With:      GHC==6.4.1 && ==6.8.2
Hs-Source-Dirs:   src
Exposed-Modules:
  Data.Accessor
  Data.Accessor.Basic
  Data.Accessor.Show
  Data.Accessor.Tuple
  Data.Accessor.BinaryRead
  Data.Accessor.MonadState
Other-Modules:
  Data.Accessor.Example