我一直在阅读这篇文章以了解镜头。他们最初定义了一个类型同义词,如下所示:
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
呢?