Scala中特定于域的单子示例

Scala中特定于域的单子示例,scala,functional-programming,monads,Scala,Functional Programming,Monads,我了解(或多或少)标准单子,如选项(可能),列表,状态,阅读器,编写器,等等。它们是通用的,可以在任何应用程序中找到。通用单子的其他示例包括迭代器、流、数据收集等 现在我想看看特定领域的单子。一个例子是Parsermonad。它不像选项、列表、状态等那样通用,因为它封装了特定于域的解析逻辑 你还能想到哪些领域特定的单子?我认为许多“领域特定”单子只提供基本单子的组合行为。例如,解析器是一个封装不确定性的状态,方法是将生成的状态/值对包装在列表中或可能(看一看)。所以,也许你只是想要monad t

我了解(或多或少)标准单子,如
选项(可能)
列表
状态
阅读器
编写器
,等等。它们是通用的,可以在任何应用程序中找到。通用单子的其他示例包括迭代器、流、数据收集等

现在我想看看特定领域的单子。一个例子是
Parser
monad。它不像
选项
列表
状态
等那样通用,因为它封装了特定于域的解析逻辑


你还能想到哪些领域特定的单子?

我认为许多“领域特定”单子只提供基本单子的组合行为。例如,解析器是一个封装不确定性的
状态
,方法是将生成的状态/值对包装在
列表中
可能
(看一看)。所以,也许你只是想要monad transformers?为像和这样的项目提供源代码是一个很好的开始。一些可能被视为“特定领域”的例子包括,等等。迈克尔:不过,这不是真的。例如,考虑“<代码> x <代码>,编译器和路由等。这些都是一个意义上的子集:<代码> IO < /代码>,但它们不只是你们提到的基本组合的组合。”米迦勒同意特拉维斯的话,我并不是说变压器栈是所有的。它们只是常见的。构建特定于域的monad的另一个重要基础是免费monad,软件包为此提供了一个很好的“接口”。另外,我想指出这篇文章,它讨论了有趣的、鲜为人知的单子(带有
Prompt
几乎等同于operational的
Program
)。而且每个代数都定义了一个单子,所以如果你的域可以用一个代数来描述,那么它就有一个特定的单子。我不明白这个问题为何被终结。这对我来说很有意义,我很想看看答案。不确定为什么会有很多答案(引用的结束原因),因为实际上没有给出答案。看来至少还有11个人会同意我的观点。但不知道为什么这个问题是针对Scala的。