Как сделать линзы из записи в GHCi
Я хочу немного поиграть с библиотекой Lens
. Я загрузил его в GHCi и создал тип данных записи с соответствующими символами подчеркивания:
> data Foo a = Foo {_arg1 :: Int, _arg2 :: [a]}
Я хотел бы сделать объективы для Foo
с помощью шаблона makeLenses
. Я хотел бы сделать это без необходимости читать весь набор Документов Template-Haskell.
Какое заклинание я могу ввести в приглашении GHCi, чтобы заставить его работать?
Ответы
Ответ 1
Протестировано в 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
:}
(Я считаю, что блок :{ ... :}
необходим для работы makeLenses
).
Кратко проверьте:
λ >> AChar 100 'f' ^. aid
100
λ >> AChar 100 'f' ^? cval
Just 'f'
λ >> AInt 101 0 ^? cval
Nothing