0
モナドの理解を深めようとしています。 私はいくつかのモナドのリターン、ジョイン、およびバインドの実装を記述しようとしています。2種類のモナドの結合関数
しかし、二kindedモナドに来たとき、私は一種の混乱している
join :: m (m a) -> m a
m (m a)
はモナドの内側に包まれたモナドことを意味しますが、2-kindedモナドを使用している場合どのような値が暗示されます。 たとえばState Monadの場合:s
またはa
?ステートモナドの参加の正しい署名はどのように見えますか?
"2種類の"モナドはありません。すべてのMonadインスタンスは種類が* *> *です。 –
関数アプリケーションと同様に、型コンストラクタはleftを関連付けます。したがって、もしあなたが 'Foo a b c d'をタイプしていれば、 'Foo Int Char Bool'は種類*' * * 'を持ち、インスタンスMonad(Foo Int Char Bool)を定義することができます。 '::((Foo Int)Char)Bool)Baz' – jberryman
@ReinHeinrichs" Monadインスタンスを持つ2種類のデータ型 "を読む – hgiesel