稍微更加详细地[间接地]回答我的上一个问题:在那里,我对镜头的定义是。
Util.Lens 导出了
data Iso α β = Iso { fw :: α -> β, bw :: β -> α }
data Lens α β = forall r. Lens (Iso α (β, r))
只要模块未经限定导入,这是可以的。问题出现在模块被限定导入的情况下,比如 import qualified Util.Lens as L
,我会收到一个关于构造函数 Iso
中不存在可见字段 fw
的错误。代码本身很简单,
data BValue = BValue { p :: Float, d :: Float, q :: Float } deriving Show
pLens :: L.Lens BValue Float
pLens = L.Lens (L.Iso { fw = pFwd, bw = pBwd })
Util.Lens 导出了
Lens(..)
和 Iso(..)
。TIA.