haskell - 我可以拥有完全多态的函数吗?

标签 haskell types

是否可以有一个完全类型二义性的函数?该函数是否具有如下类型签名:

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/

相关文章:

haskell - 关注点分离 : when is it best to disassociate semantics from syntax?

haskell - 约束类型在哪里定义?

scala - Scala 和 Haskell 类型系统的区别和相似之处是什么?

Swift 闭包作为元组中的字段

Python 列表类型

haskell - 在 Haskell 中,如何在 Dynamic TypeRef 上做一个 case 语句

haskell - 如何即时使用 IO monad 输出

haskell - 正式调用的 monad 绑定(bind)操作的参数是什么?

haskell - libspotify : music_delivery callback not firing

python - 如何更改内置的 type() 函数?