你在这里问了很多问题,但我可以尽我所能回答他们:
......不同类型的代数结构,如函子、幺半群、单子等。这些到底有什么不同?它们如何在编程环境中使用?
这是学习 Haskell 时很常见的问题。我不会在这里写另一个答案——无论如何,一个完整的答案相当长——但一个简单的谷歌搜索给出了一些非常好的答案:例如我可以推荐1 2 3
类型类与常规类有何不同?
(通过“常规课程”,我假设您的意思是 OOP 中的课程。)
这是另一个常见的问题。基本上,两者除了名字之外几乎没有任何共同之处。OOP 中的类是字段和方法的组合。通过创建该类的实例来使用类;每个实例都可以在其字段中存储数据,并使用其方法操作该数据。
相比之下,类型类只是函数的集合(通常也称为方法,尽管几乎没有联系)。您可以通过为该类型重新定义该类的每个方法来声明该数据类型的类型类的实例(同样,无连接),之后您可以使用该类型的方法。例如,Eq
该类如下所示:
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
Bool
您可以通过实现每个函数来定义该类的实例,例如:
instance Eq Bool where
True == True = True
False == False = True
_ == _ = False
p /= q = not (p == q)
谁能至少给我指出一本关于抽象代数和函数式编程的好书的方向?
我必须承认我对此无能为力(无论如何这对 Stack Overflow 来说都是题外话)。
有人建议我学习 Haskell,但我真的需要学习 Haskell 才能理解函数式编程吗?
不,你不知道——你可以从任何函数式语言中学习函数式编程,包括 Lisp(尤其是 Scheme 方言)、OCaml、F#、Elm、Scala 等。Haskell 恰好是一种特别“纯”的函数式编程语言,我会也推荐它,但如果你只是想学习和理解函数式编程,那么其中任何一个都可以。