Safe Haskell | None |
---|---|
Language | Haskell98 |
Control.Reference.TH.Records
Description
This module can be used to generate references for record fields.
If the field surely exists, a Lens
will be generated.
If the field may not exist, it will be a Partial
lens.
It will have the maximum amount of polymorphism it can create.
If the name of the field starts with "_", the name of the field will be the same with "_" removed. If not, the reference name will be the field name with "_" added te the start.
The following code sample:
data Maybe' a = Just' { _fromJust' :: a } | Nothing' $(makeReferences ''Maybe) data Tuple a b = Tuple { _fst' :: a, _snd' :: b } $(makeReferences ''Tuple)
Is equivalent to:
data Maybe' a = Just' { _fromJust' :: a } | Nothing' fromJust' ::Partial
(Maybe' a) (Maybe' b) a b fromJust' =partial
(case Just' x -> Right (x, y -> return (Just' y)) Nothing' -> Left (return Nothing')) data Tuple a b = Tuple { _fst' :: a, _snd' :: b } fst' ::Lens
(Tuple a c) (Tuple b c) a b fst' =lens
_fst' (b tup -> tup { _fst' = b }) snd' ::Lens
(Tuple a c) (Tuple a d) c d snd' =lens
_snd' (b tup -> tup { _snd' = b })