用其他语言键入应用程序

如果你熟悉 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

这也可以使用 ScopedTypeVariablesRank2TypesRankNTypes 这样的扩展来明确。

doNothing::forall a. a -> a
doNothing x = x

然后在呼叫站点,我们可以再次写 doNothing 5.0doNothing @Float 5.0