在函数式编程中有很多模式。例如Monads,Monads,函子e.t.c,但是这些都是非常高层次的抽象,人们并不知道什么时候使用哪一个抽象。
当你想把A的几个项目减少到一个A的单个项目时,Monoids是很有用的
从这个意义上说,这些抽象的每一个都试图解决哪些问题?也许我们可以展示程序员在发现monoid之前是如何处理问题的,而不是如何使用monoid来处理相同的问题。
发布于 2017-05-03 12:29:42
这些模式是数学概念,它们要么适用于您的程序,要么不适用。您可以不使用它们编写完全相同的代码,您就会开始注意到,您针对不同数据类型的许多函数都有一个共同的结构。
不仅每种数据类型都需要不同的函数来处理这种常见的事情,而且每个数据类型都需要重写所有的助手函数。这是当您发现您想要使用抽象时。检查哪些类型与公共结构匹配,并提供预期的辅助函数,然后将其应用于数据类型。
关于您的具体示例:在s被“发现”之前,每个人都使用++来附加两个列表,使用concat来附加多个列表。同样,他们使用+来和两个数字,用sum来和多个数字。如果有人写了一棵树,它的元素应该折叠成一个值,他必须使用相应的操作为列表编写一个实现,为数字编写一个实现。
现在,有了一元论,我们就可以抽象出具体的类型,并为任意的单调词编写树实现。我们使用mappend和mconcat操作而不是特定的操作,我们的树对列表和数字都有效。甚至任何其他的单样体。
https://stackoverflow.com/questions/43759201
复制相似问题