我一直在阅读this post了解镜头。他们最初定义了一个
像这样输入同义词:
type RefF a b = forall f. Functor f => (b -> f b) -> (a -> f a)
Const 定义如下:
newtype Const a b = Const { getConst :: a }
get
怎么办函数类型检查:get :: RefF a b -> a -> b
get r = getConst . r Const
getConst 的类型是这样的:
getConst :: Const a b -> a
r Const
的类型我想是这样的:r Const = (b -> f b) -> (Const -> f Const)
那么两者如何
getConst
和 r Const
得到的组成给 a -> b
?
最佳答案
r
的类型用 const 仿函数代替 f
得到;因为我们需要一个 b
结果必须是第一个参数(实际上只有 x
可以在 Const x y
类型中找到)
r :: (b -> Const b b) -> (a -> Const b a)
现在论证很简单:那只是
Const
构造函数。 r Const :: a -> Const b a
如果你用
getConst :: Const b a -> b
进行后期合成,你最终得到 getConst . r Const :: a -> b
关于haskell - 如何在镜头中进行功能类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22911456/