如何从GHCi中的记录制作镜头

时间:2013-08-23 06:01:38

标签: haskell ghci template-haskell lens

我想稍微使用Lens库。我已将其加载到GHCi中并创建了具有相应下划线的记录数据类型:

> data Foo a = Foo {_arg1 :: Int, _arg2 :: [a]}

我想使用Foo模板为makeLenses制作镜头。我想这样做而不需要阅读整套Template-Haskell docs

我可以在GHCi提示符下输入什么咒语来使其发挥作用?

1 个答案:

答案 0 :(得分:15)

在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