スーパーモナドを提案した論文が、次の論文です。定式化した話なんかも載っています。して提供されています。https://hackage.haskell.org/package/supermonadスーパーモナドの定義まずは普通のモナドのおさらいから。普通のモナドは次のように定義されているのでした。b指標付きモナドの定義も覗いてみます。指標付きモナドは次のように定義されています。これらを一般化した概念であるスーパーモナドは、次のように定義されています。つに分かれているのが特徴的です。スーパーモナドが普通のモナドの一般化であることは明らかです。スーパーモナドが指標付きモナドの一般化になっていることも、次のような対応がとれることからわかります。対応なお、普通のモナドがモナド則を満たす必要があるように、スーパーモナドもスーパーモナド則を満たす必要があります。スーパーモナド則は、普通のモナド則の自然な一般化です。モジュールファイルの冒頭には、最低限、次のような宣言を書く必要があります。オプションを指定して行います。モナドをスーパーモナドとして扱うプログラムの例を紹介します。宣言が書かれています。宣言を書く必要はありません。例として、(スーパーモナドを使わない)次のプログラムを、スーパーモナドで書き直してみます。0)これをスーパーモナドで書き直すと、次のようになります。スーパーモナドとして扱ってみます。モナドを普通に使うバージョンから。0スーパーモナドを使うようにこれを書き換えると、次のようになります。宣言を書くことで、指標モナドもスーパーモナドとして扱えることが確認できました。定義されているモナドのことを「普通のモナド」と呼んでいます。モナドはクライスリトリプルがベースだから云々、というツッコミはご容赦を...。紹介されているものを載せています。実際の定義とは少し異なります。requestStockLike29@tnagao7Javaの世界と関数型の世界を行ったり来たり。