2012-09-12 24 views
0

虽然我在阅读mondads上的this教程,但发现了以下表达式。monad教程中使用的一些语法的含义

data M a = Raise Exception |返回

类型异常=字符串

它说,一个被用作类型变量和范围中引发异常值,并返回一个,但我不理解使用(或含义)M在这里。如果M是数据类型为什么它使用像M a?

+0

我假设这是Haskell代码;如果是这样,你可能会考虑重新标记。 – waldrumpus

回答

0

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

+2

M不是数据类型,它是精确的数据类型构造函数。 – Satvik

+0

你是对的,这是sl。。 – waldrumpus

5

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

M不是数据类型,它是数据类型构造函数。因此,要构建M a类型的数据类型,需要使用Type构造函数M(数据类型为a)来获取类型为M a的数据类型。例如数据类型M IntM String

另一方面RaiseReturn是值构造函数。因此,要获得类型值为M Int的值,请输入数值构造函数Return的值Int,如Return 2

背后有一个很好的理论。您可以阅读更多关于价值和类型构造函数here

+0

非常好的解释,非常精确。 – waldrumpus