如何从新版本(4.3)中的旧镜头版本替换'makeIso'?

时间:2014-07-26 08:14:57

标签: haskell lens

我有一些代码使用makeIso包中的lens

newtype Foo = Foo Integer
makeIso Foo'

incrementFoo :: Foo -> Foo
incrementFoo = foo +~ 1

现在我想将此代码用于lens包的4.3版本。 此版本缺少makeIso,更改日志显示:

  

已移除makeIsos,转而使用makePrismsmakeLenses。在适当的时候,这些函数中的每一个都将构造Isos

因为从来没有makeIsos这样的功能,我认为这是一个拼写错误,他们的意思是makeIso。因此,我尝试将makeIso替换为makeLenses,但这不会创建foo Iso

替换makeIso的正确方法是什么?

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

使用下划线定义访问者:

{-# LANGUAGE TemplateHaskell #-}

import Control.Lens

newtype Foo = Foo { _getFoo :: Integer } deriving Show
$(makeLenses ''Foo)

这将创建一个getFoo iso:

getFoo :: (Profunctor p, Functor f) => p Integer (f Integer) -> p Foo (f Foo)