我可以拥有完全多态的功能吗?

时间:2013-06-15 01:19:52

标签: haskell types

是否可以使用完全类型的模糊函数?该函数是否具有如下类型签名:

Poly :: a -> a

其中a是一个类型变量,就像类型构造函数声明或类型类要求一样使用的语法?

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

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

id :: a -> a

1 个答案:

答案 0 :(得分:9)

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

>>> let f x = x

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

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

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

f x = x

...编译器会推断出f的类型为a -> a。您也可以明确注释f

f :: a -> a
f x = x