2014-07-26 45 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'代替。 –

相關問題