3

如果我定义一个带有元组样式参数的函数,我可以定义参数类型和返回类型:

fun hello(name:String, code:int):String = "hello!"

但是如果我使用咖喱风格,我只能这样做:

fun hello name code = "hello!"

是否可以为后一种添加参数类型或返回类型?

4

2 回答 2

10

确实有可能:

fun hello (name : string) (code : int) : string = "hello!"

但是,在标准 ML 中很少需要或使用类型注释,因此通常最好省略它们。

于 2013-10-23T13:56:42.533 回答
6

如果函数没有柯里化,另一种方法是指定完整的函数类型,如 Haskell,

val hello : string * int -> string = 
  fn (name, code) => "hello!"

您也可以使用递归函数来做到这一点

val rec hello : string * int -> string = 
  fn (name, code) => hello ("hello!", 5)

Uncurried 函数有点混乱,尽管类型描述仍然更好。

val hello : name -> int -> string = 
  fn name => fn code => "hello!"
于 2013-10-23T15:41:11.160 回答