首页 > 解决方案 > 同构对的单子实例的已知/已建立用例

问题描述

一旦我问了这个问题,它被正确地标记为另一个问题的重复。

现在我有一个好奇心,对于一对同质类型的 monad 实例是否有任何已知的用例?

以下是它的实例:

data Pair a = Pair a a deriving Show

instance Functor Pair where
  fmap f (Pair a b) = Pair (f a) (f b)

instance Applicative Pair where
  pure a = Pair a a
  Pair f g <*> Pair x y =  Pair (f x) (g y)

instance Monad Pair where
    m >>= f = joinPair (f <$> m)

joinPair :: Pair (Pair a) -> Pair a
joinPair (Pair (Pair x _) (Pair _ y)) = Pair x y

标签: haskellmonads

解决方案


你与/Pair a同构:Reader Bool aBool -> a

to (Pair f t) = \b -> if b then t else f

from f = Pair (f False) (f True)

因此,Reader monad的任何用例也是您的 monad 的潜在用例。这些数据类型的通用术语是可表示函子


推荐阅读