私はHaskellプログラミング言語を学んでいます。私が読んでいるものから、入力/出力(IO)はHaskellの純粋さに対する課題を引き起こします。なぜなら、定義により、私たちは外の世界と相互作用しているからです。ウィキペディアから:
Haskellなどの純粋に関数型の言語では、関数は、関数のセマンティクスの一部として、外部から見える副作用を持ちません。関数は直接的な副作用を引き起こすことはできませんが、呼び出し側が都合のよいときに適用する必要のある副作用を説明する値を作成できます。
Haskell表記では、タイプIO aの値は、実行時にタイプaの値を生成するアクションを表します。
すぐに、IOがHaskellモナドの例であることを知りました。モナドが何であるかについての多くの説明はありませんが。ファンクタ、Applicatives、そしてモナドでの写真
モナドについて学ぶ方法:
- コンピュータサイエンスの博士号を取得します。
- このセクションでは必要ないので、捨ててください!
これまでに、私はさまざまな定義を読みました。それらは、コンテキストを追加したり、特定の概念に基づいて大きな言語の中に小さなプログラミング言語を作成したりしています。それでも、どのモナドとそれらのアイデアがどのように適用されるかを理解しようとしています。
Haskellにmonad
は、もう1つの型クラスがあり、基本的にそれを定義するルールは1つだけです。そしてIO
その一例です。
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
/programming/44965/what-is-a-monad
ここで代数学が起こっていますか?IOの代数とは何ですか?
言語固有であることをお詫び申し上げます。私の希望は、この議論のほとんどがすべての関数型プログラミング言語に当てはまることです。私の議論における誤りは、この領域についての私自身の限られた理解を表しています。
私がnLabで見つけたモナドの別の定義があり、それはプログラミング言語にさえ特定されていません。
別の質問で、Haskellの場合のモナドのカテゴリー理論の概念がCSの定義とどのように一致するかを理解したいと思います。