类型变量在构造函数中?

问题描述:

我可以在数据构造函数中有一个函数吗?像:类型变量在构造函数中?

data Something = (a->b) Something1 Something2 

是的,当然可以。唯一重要的事情是,你(总是)为您的数据的构造函数需要一个名字:

data <name> <para0> <param1> ... = <constructor> <arg0> <arg1> <arg2> ... 

所以对于我们的例子中,它成为

data Something a b = Constructor (a -> b) Something1 Something2 
+0

这里'Constructor'是数据的构造函数,而不是类型构造。类型构造函数是'Something'。它被称为类型构造函数,因为当你将它应用到某个东西时,你有一个类型('Something a b'),而如果你将一个数据构造函数应用于某个东西,你就有一些数据('Constructor f x y')。 – Rotsor

+0

@Rotsor解决这个问题 – fuz

有一些规则应遵循的命名构造函数。

  • 以大写字母开头。
  • 可以包含下划线,单引号,字母和数字。
  • 构造函数可以是运算符名称,只要它们以':'开头即可。

但ofcourse你可以在数据定义功能,如

data Something a b = Something (a->b) a b