是否可以有一个完全类型二义性的函数?该函数是否具有如下类型签名:
Poly :: a -> a
其中 a 是类型变量,类似于类型构造函数声明或类型类要求所使用的语法?
data TypeConstructor a = One | Two a
Func :: Num a => a -> a
是否可以创建一个无处不在的 id
函数,它总是返回自己的值,而不必知道正在使用什么值构造函数?
id :: a -> a
最佳答案
就像其他人所说的那样,如果 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
关于haskell - 我可以拥有完全多态的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17119346/