この質問は、 のインスタンス定義を示しています。(,) 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)
問題は、その???
部分をどのように書くかです。
アップデート
実際、この質問はより一般的な問題の特殊なケースです: 最後に表示されない型に作用する型クラスのインスタンスを書くことは可能ですか? 私の場合、型コンストラクターはであり、最後の型パラメーターではないwhere(,) a b
のインスタンスにしたいと考えています。Monad a
a