2014-07-26 44 views
2

我有一个使用makeIsolens包装一些代码:如何从新版本(4.3)中的旧镜头版本中替换“makeIso”?

newtype Foo = Foo Integer 
makeIso Foo' 

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

现在我想用这个代码与4.3版本的lens包。 该版本缺少makeIso和更新日志说:

赞成makePrismsmakeLenses删除makeIsos。这些功能中的每一个都将在适当的时候构造Isos

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

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

感谢您的帮助

回答

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) 
+1

想必'makePrisms'将使'_Foo'代替。 –

相关问题