功能编程:何时使用哪个抽象



功能编程中有很多模式。例如单型,单子,函子E.T.C,但它们是非常高的抽象,并且真的不知道何时使用哪个。

例如。当您想将A的几个项目减少到一个

的单个项目时,单型很有用

从这个意义上讲,这些抽象试图解决的问题是什么问题?也许我们可以在发现monoid之前与如何通过使用monoid

来解决相同问题之前如何解决问题。

那些模式是数学概念,它们要么适用于您的程序,要么不适用。您可以在没有它们的情况下编写完全相同的代码,您只会开始注意到,不同数据类型的许多功能共享一个共同的结构。

,不仅您需要每种数据类型的不同功能来处理此常见事物,而且每个数据类型都需要重写所有助手功能。这是您发现要使用抽象的时候。您检查哪个类型类型与共同结构匹配并提供预期的助手功能,然后将其应用于您的数据类型。


关于您的具体示例:在"发现" Monoid s之前,每个人都使用++附加两个列表,而concat则用于附加多个列表。同样,他们使用+总和两个数字,而sum总和多个数字。如果有人写了一棵树,其元素应折叠成一个值,则他必须使用各自的操作为列表编写一个实现数字,一个实现数字。
现在,使用单型,我们可以在混凝土类型上抽象,并为任意单体编写树实现。我们使用mappendmconcat操作而不是特定操作,我们的树适用于列表和数字。甚至任何其他单粒。

最新更新