私は関数型プログラミングの概念とアイデアについて軽く読んでいます。これまでのところ、代数構造、型クラス、代数データ型という 3 つの主な概念について読んできました。代数データ型とは何かについて、かなりよく理解しています。合計型と積型はかなり簡単だと思います。たとえば、 (4 つの値と記号を持つ) と(13 の値と記号を持つ) Card
2 つの列挙型から構成される積型である型のような代数データ型を作成することを想像できます。Suit
Rank
しかし、私は代数構造と型クラスが何であるかを正確に理解しようとすることにまだ夢中になっています。私は頭の中に表面レベルのイメージしか持っていませんが、たとえば、ファンクター、モノイド、モナドなどのさまざまなタイプの代数構造について頭を完全に理解することはできません.これらは正確にどのように異なるのでしょうか? プログラミング設定でどのように使用できますか? 型クラスは通常のクラスとどう違うのですか? 少なくとも、抽象代数と関数型プログラミングに関する優れた本の方向性を教えてくれる人はいますか? 誰かが Haskell を学ぶことを勧めましたが、関数型プログラミングを理解するために本当に Haskell を学ぶ必要がありますか?