我开始学习函数式编程(OCaml),但我不了解关于fp的一个重要主题:签名(我不确定它是否是一个正确的名称).当我输入一些东西并用ocaml编译时,我得到了例子:
# let inc x = x + 1 ;;
val inc : int -> int = <fun>
Run Code Online (Sandbox Code Playgroud)
这是微不足道的,但我不知道,为什么:
let something f g a b = f a (g a b)
Run Code Online (Sandbox Code Playgroud)
给出一个输出:
val something : (’a -> ’b -> ’c) -> (’a -> ’d -> ’b) -> ’a -> ’d -> ’c = <fun>
Run Code Online (Sandbox Code Playgroud)
我想,这个主题对于你们很多人来说绝对是fp的基础,但我在这里寻求帮助,因为我没有在互联网上找到任何有关OCaml中签名的内容(有一些关于Haskell签名的文章,但不是解释).
如果这个主题以某种方式存活下来,我在这里发布了几个函数,这些签名让我感到困惑:
# let nie f a b = f b a ;; (* flip *)
val nie : (’a -> ’b -> ’c) …Run Code Online (Sandbox Code Playgroud)