haskell - ¿Cómo hago lentes a partir de un registro en GHCi?
template-haskell lens (1)
Probado en GHCi 7.8.3:
:set -XTemplateHaskell
:m +Control.Lens
:{
data AST = AInt { _aid :: Int, _ival :: Int }
| AChar { _aid :: Int, _cval :: Char }
deriving (Show)
makeLenses ''''AST
:}
(Creo que el bloque :{ ... :}
es necesario para que funcione makeLenses
).
Vamos a revisar brevemente:
λ >> AChar 100 ''f'' ^. aid
100
λ >> AChar 100 ''f'' ^? cval
Just ''f''
λ >> AInt 101 0 ^? cval
Nothing
Quiero jugar un poco con la biblioteca de Lens
. Lo he cargado en GHCi y he creado un tipo de datos de registro con los guiones bajos apropiados:
> data Foo a = Foo {_arg1 :: Int, _arg2 :: [a]}
Me gustaría hacer las lentes para Foo
usando la plantilla de makeLenses
. Me gustaría hacer esto sin necesidad de leer todo el conjunto de documentos de Template-Haskell .
¿Qué conjuro puedo escribir en el aviso de GHCi para que esto funcione?