我試圖創建一個getter一個Lens
和setter方法是我從另一個Lens
有:構建一個相同的鏡頭
import Control.Lens
idL :: Lens s t a b -> Lens s t a b
idL l = lens (\s -> view l s) (\s b -> set l b s)
但是,它未能與一個不起眼的(對我來說)錯誤:
Expected type: Getting a s a
Actual type: (a -> Accessor a b) -> s -> Accessor a t
In the first argument of `view', namely `l'
我在做什麼錯?這可能是一些非常基本的東西,但是,唉,我還不知道究竟發生了什麼(Getting
,Accessor
),以便我自己解開它。
這對我來說很好(啓用了'Rank2:Types'語言雜注)。你是從一個文件加載一個模塊,還是試圖在repl中定義'idL'? –
@ChrisTaylor:啓用了'Rank2Types'的文件。如果有幫助,我也使用lens-3.9.0.3和ghc-7.6.3。 – Artyom
我剛剛在GHCi中運行這個,沒有問題(顯式類型簽名雖然是必要的) – jozefg