レンズを理解するためにこの投稿を読んでいます。最初に、次のような型シノニムを定義します。
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
get の両方が を与えるためにどのように構成されるのでしょうa -> b
か?