咖喱函数的优点和缺点是什么

问题描述:

我只是知道这是简单的部分应用程序,它可以(并且对Haskell来说)简化语法?咖喱函数的优点和缺点是什么

主要优点是它使部分功能应用更加方便,从而鼓励功能组合。

一个缺点是它不适合您可能想要的其他一些语言功能,例如标记,可选和可变参数。要实现它并不是不可能的,例如OCaml既有标签也有可选的参数,但它很古怪。您如何知道函数部分应用或完全应用,而不是应用可选参数? OCaml的解决方案是假定部分应用程序,并要求使用非可选参数“终止”函数,以便能够完全应用而不指定所有可选参数。

如果语言不纯并出现某种形式的类型推断,则会弹出另一个缺点。然后可以部分应用副作用函数,丢弃该值而不会注意到该类型是不正确的,从而不会产生副作用。一种语言对这种错误的容易程度取决于它的类型推断,但这是OCaml等语言中相当常见的初学者错误。但是可以通过使用类型注释进行规范来避免它。