0

在我阅读有关 monads 的教程时,发现了以下表达式。

数据 M a = 引发异常 | 返回一个

类型异常 = 字符串

它说a用作类型变量和Raise Exception and Return a中的值范围,但我不明白这里M的用途(或含义)。如果 M 是一种数据类型,为什么要像 M a 一样使用它?

4

2 回答 2

5

您需要区分值构造函数和类型构造函数。

M不是数据类型,它是数据类型构造函数。所以要构造一个 Type 的数据类型,M a你给 Type 构造函数M,一个 Type 的数据类型a来获取 type 的数据类型M a。例如数据类型M IntM String.

另一方面RaiseReturn这里是值构造函数。所以要获得一个类型的值,说M Int你给值构造函数Return提供一个类型的值Int,比如Return 2

这背后有一个很好的理论。您可以在此处阅读有关值和类型构造函数的更多信息。

于 2012-09-12T13:00:35.963 回答
0

M是正在定义的类型构造函数的名称,a是此构造函数的类型参数。稍后要使用该数据类型,您必须为构造函数M提供类型参数a,例如M Int

于 2012-09-12T12:23:54.257 回答