6

有可能有一个完全类型不明确的函数吗?该函数是否具有如下类型签名:

Poly :: a -> a

其中 a 是一个类型变量,例如与类型构造函数声明或类型类要求一起使用的语法?

data TypeConstructor a = One | Two a
Func :: Num a => a -> a

是否有可能制作一个无处不在的id函数,它总是返回它自己的值,而不必知道正在使用什么值构造函数?

id :: a -> a
4

1 回答 1

9

就像其他人所说的那样,如果 Haskell 函数不使用底层类型的任何具体特性,则默认情况下它们会自动多态。如果您打开ghci并输入:

>>> let f x = x

...然后问它的类型f,它会自动推断它f是完全多态的:

>>> :type f
f :: t -> t

如果你使用文件也是一样的。你可以定义:

f x = x

...并且编译器将推断出f具有 type a -> a。你也可以显式地注解f

f :: a -> a
f x = x
于 2013-06-15T01:56:33.480 回答