2014-02-10 54 views
1

首先,是否存在以下簽名(我個人認爲它可能有錯誤),如果是這樣,您能給我一個匹配代碼的例子:OCaml簽名的未知功能

val f : 'a -> ('a -> 'a) -> 'b -> ('a -> ('a -> 'a) -> 'b) -> bool = <fun> 
+0

是的,你可以寫這樣的功能。你能給我們更多的背景嗎?如果是作業,我們不應該給你一個直接的答案。 – camlspotter

+0

這個問題是相當扭曲的 –

回答

2

下面是這兩個作爲例子:

let f a aa b a_aa_b = (aa a, a_aa_b a aa) = (a,b) (* forced by type inference *) 
let f (a:'a) (aa: 'a -> 'a) (b: 'b) (c: 'a -> ('a -> 'a) -> 'b) = true (* explicitly stated *) 

我不記得我以前見過這個簽名,所以我不知道哪些功能可能有它背後隱藏。

+2

你認爲即使'val f:'a - >'a'存在,而不是'let f x = x'? –

+2

據我所知,它是唯一的總數(此外,唯一有用的)這種類型的函數。有關更多信息,請參閱http://stackoverflow.com/questions/3945011/ocaml-is-there-a-function-with-type-a-a-other-than-the-identity-function。 – phimuemue