在写下这个答案时,主要是为了更好地理解对作为 monads 的理解,我偶然发现了我阅读的 Hackage 上的源代码Monad,(,) a仅参考了这个实例
instance Monoid a => Monad ((,) a) where
(u, a) >>= k = case k a of (v, b) -> (u <> v, b)
Run Code Online (Sandbox Code Playgroud)
在哪儿return???我希望能找到这样的东西
return a = (mempty, a)
Run Code Online (Sandbox Code Playgroud)
除了上面的两行。这个定义是否return以某种方式隐含在其他事物中?或者它可能是在其他地方定义的?
一旦我问了这个问题,这个问题就被正确地标记为与另一个问题重复。
现在我很好奇,一对同构类型的 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 …Run Code Online (Sandbox Code Playgroud)