当我在monad上阅读this教程时,找到了以下表达式。
数据M a =提高异常|返回
输入Exception = String
它表示a用作类型变量和Raise Exception和Return a中的一系列值,但我不明白M的使用(或含义)。如果M是数据类型为什么它像M一样被使用?
答案 0 :(得分:5)
您需要区分Value Constructors和Type Constructors。
M
不是数据类型,它是数据类型构造函数。因此,要构造类型M a
的数据类型,您需要为类型构造函数M
提供类型a
的数据类型,以获取类型M a
的数据类型。
例如,数据类型M Int
或M String
。
另一方面,Raise
和Return
是值构造函数。因此,要获得类型为M Int
的值,请为值构造函数Return
提供类型为Int
的值,如Return 2
。
这背后有一个很好的理论。您可以阅读有关值和类型构造函数here的更多信息。
答案 1 :(得分:0)
M
是要定义的类型构造函数的名称,a
是此构造函数的类型参数。要在以后使用数据类型,您必须提供构造函数M
并为a
提供类型参数,例如M Int
。