余暇にはHaskellを学んでいるので、これは初心者の質問です。
Either a私の読書で、私はどのようにインスタンスが作成されるかを示す例に出くわしましたFunctor:
instance Functor (Either a) where
fmap f (Right x) = Right (f x)
fmap f (Left x) = Left x
ここで、値コンストラクターの場合に実装がマップされる理由を理解しようとしていますが、 ?Rightの場合はマップされません。Left
これが私の理解です:
まず、上記のインスタンスを次のように書き直します
instance Functor (Either a) where
fmap g (Right x) = Right (g x)
fmap g (Left x) = Left x
今:
そんなこと知ってる
fmap :: (c -> d) -> f c -> f dで代用
fするEither aとfmap :: (c -> d) -> Either a c -> Either a dのタイプ
Right (g x)はEither a (g x)であり、のタイプg xはdであるため、のタイプはでRight (g x)ある必要がありますEither a d。これは、私たちが期待するものですfmap(上記の2を参照)。ここで
Left (g x)、同じ理由を使用して、そのタイプがEither (g x) b、つまりEither d b、期待するものではないことを示すことができfmapます(上記の2を参照)。dこれは、最初のパラメーターではなく、2番目のパラメーターである必要があります。したがって、にマップすることはできませんLeft。
私の推論は正しいですか?