2

我有一些makeIsolens包中使用的代码:

newtype Foo = Foo Integer
makeIso Foo'

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

现在我想将此代码与 4.3 版本的lens包一起使用。此版本缺少makeIso,更改日志说:

删除makeIsos以支持makePrismsand makeLenses。这些函数中的每一个都将Isos在适当的时候构建。

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

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

谢谢你的帮助

4

1 回答 1

4

使用下划线定义访问器:

{-# LANGUAGE TemplateHaskell #-}

import Control.Lens

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

这将创建一个getFooiso:

getFoo :: (Profunctor p, Functor f) => p Integer (f Integer) -> p Foo (f Foo)
于 2014-07-26T12:17:48.167 回答