monad教程中使用的一些语法的含义

时间:2012-09-12 12:13:36

标签: haskell functional-programming monads

当我在monad上阅读this教程时,找到了以下表达式。

  

数据M a =提高异常|返回

     

输入Exception = String

它表示a用作类型变量和Raise Exception和Return a中的一系列值,但我不明白M的使用(或含义)。如果M是数据类型为什么它像M一样被使用?

2 个答案:

答案 0 :(得分:5)

您需要区分Value Constructors和Type Constructors。

M不是数据类型,它是数据类型构造函数。因此,要构造类型M a的数据类型,您需要为类型构造函数M提供类型a的数据类型,以获取类型M a的数据类型。 例如,数据类型M IntM String

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

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

答案 1 :(得分:0)

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