Safe Haskell | None |
---|---|
Language | Haskell98 |
This module provides an automatic Template Haskell routine to scour data type definitions and generate accessor objects for them automatically.
Documentation
nameDeriveAccessors :: Name -> (String -> Maybe String) -> Q [Dec] Source #
nameDeriveAccessors n f
where n
is the name of a data type
declared with data
and f
is a function from names of fields
in that data type to the name of the corresponding accessor. If
f
returns Nothing
, then no accessor is generated for that
field.
deriveAccessors :: Name -> Q [Dec] Source #
deriveAccessors n
where n
is the name of a data type
declared with data
looks through all the declared fields
of the data type, and for each field ending in an underscore
generates an accessor of the same name without the underscore.
It is "nameDeriveAccessors" n f where f
satisfies
f (s ++ "_") = Just s f x = Nothing -- otherwise
For example, given the data type:
data Score = Score { p1Score_ :: Int , p2Score_ :: Int , rounds :: Int }
deriveAccessors
will generate the following objects:
p1Score :: Accessor Score Int p1Score = Accessor p1Score_ (\x s -> s { p1Score_ = x }) p2Score :: Accessor Score Int p2Score = Accessor p2Score_ (\x s -> s { p2Score_ = x })
It is used with Template Haskell syntax like:
$( deriveAccessors ''TypeName )
And will generate accessors when TypeName was declared
using data
or newtype
.