gpt4 book ai didi

haskell - 成对的 Monad 实例

转载 作者:行者123 更新时间:2023-12-02 17:42:16 26 4
gpt4 key购买 nike

This question显示了 (,) a b 的实例定义,其中 aMonoid 的实例。

但是,我不知道如何为(,) a b写类似的东西,而bMonoid的一个实例?只要我会写定义,我基本上可以做到这一点:

instance Monoid b => Monad ((,) ???) where
return a = (a,mempty)
~(a,b) >>= f = let (c,b1) in f a in (c,b `mappend` b1)

那么问题是???部分怎么写?

更新

实际上这个问题是一个更普遍问题的特例:是否可以编写作用于某些未出现在末尾的类型的类型类实例?在我的例子中,类型构造函数是 (,) a b,我想让它成为 Monad a 的实例,其中 a 不是最后一个类型参数。

最佳答案

我们可以写,现在同义词不适合这种情况,所以我们使用新类型:

newtype RevTuple b a = RevTuple { totuple :: (a , b) }

instance Monoid b => Monad (RevTuple b) where
return a = RevTuple (a,mempty)
(RevTuple (a,b)) >>= f =
let RevTuple (c,b1) = f a in RevTuple (c,b `mappend` b1)

关于haskell - 成对的 Monad 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19196333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com