OCaml比赛速记

时间:2018-10-07 22:22:05

标签: syntax pattern-matching ocaml

当我第一次在OCaml中使用function关键字时,我得到的印象是消除模式匹配的match x with行是语法糖。

但是,我看到两者之间存在签名差异,如下例所示。在什么情况下,您希望使用function示例?

type e = Foo | Bar

let eval1 exp =
match exp with
| Foo -> "Foo"
| Bar -> "Bar"

let eval2 exp = function
| Foo -> "Foo"
| Bar -> "Bar"

第一个函数的签名为val eval1 : e -> bytes = <fun>

第二个函数的签名为val eval2 : 'a -> e -> bytes = <fun>

1 个答案:

答案 0 :(得分:6)

eval2中,使用function时,匹配的参数是隐式的。 exp此处未使用,应向您发出编译器警告(除非您已将其关闭)。如果删除exp参数,则签名应该相同。

或者换句话说,function ...不仅仅是match exp with ...的语法糖,而是fun exp -> match exp with ...的语法糖