【发布时间】:2013-10-05 20:04:48
【问题描述】:
This question 显示(,) a b 的实例定义,其中a 是Monoid 的实例。
但是,我不知道如何为(,) a b 写类似的东西,而b 是Monoid 的一个实例?只要能写出定义,我基本上都可以做到:
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 不是最后一个类型参数。
【问题讨论】:
-
看看同构类型
(a,a)(实际上是它的一个同构)如何以与(a,b)完全不同的方式变成Monad也很有趣。