记录中的不可访问字段

3
稍微更加详细地[间接地]回答我的上一个问题:在那里,我对镜头的定义是。
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.
1个回答

5
记录字段也需要进行限定,即:
L.Iso { L.fw = pFwd, L.bw = pBwd }

谢谢,虽然这似乎很明显,但还是因为太奇怪而需要明确询问。 - Arets Paeglis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接