是否可以使用完全类型的模糊函数?该函数是否具有如下类型签名:
Poly :: a -> a
其中a是一个类型变量,就像类型构造函数声明或类型类要求一样使用的语法?
data TypeConstructor a = One | Two a
Func :: Num a => a -> a
是否有可能创建一个无处不在的id
函数,它总是返回它自己的值,而不必知道正在使用什么值的构造函数?
id :: a -> a
答案 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