19

Lens図書館でちょっと遊んでみたい。それを GHCi にロードし、適切なアンダースコアを使用してレコード データ型を作成しました。

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

テンプレートをFoo使用するためのレンズを作りたいです。Template-Haskell docsmakeLensesのセット全体を読む必要なく、これを行いたいと思います。

これを機能させるには、GHCi プロンプトでどのような呪文を入力すればよいですか?

4

1 に答える 1

20

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
于 2014-08-19T20:08:27.123 に答える