用其他语言键入应用程序
如果你熟悉 Java,C#或 C++等语言以及泛型/模板的概念,那么这种比较可能对你有用。
假设我们在 C#中有一个泛型函数
public static T DoNothing<T>(T in) { return in; }
要用 float
来调用这个函数,我们可以做 DoNothing(5.0f)
,或者如果我们想要明确,我们可以说 DoNothing<float>(5.0f)
。尖括号内的那部分是类型应用程序。
在 Haskell 中它是相同的,除了类型参数不仅隐含在调用站点而且隐含在定义站点。
doNothing::a -> a
doNothing x = x
这也可以使用 ScopedTypeVariables
,Rank2Types
或 RankNTypes
这样的扩展来明确。
doNothing::forall a. a -> a
doNothing x = x
然后在呼叫站点,我们可以再次写 doNothing 5.0
或 doNothing @Float 5.0