2014-01-19 175 views
-1

我想完成類似這樣的事情,但我無法完全理解語法。OCaml抽象類型函數

type _ s = Var : 'a -> 'a s 
type _ t = 
| AA :('a -> 'a s) -> 'c t 
| AB : ('a -> 'b s) -> 'c t 
let apply_to x = function 
| AA g -> g x 
| AB g -> g x 

回答

1

那麼,像'a -> 'a s這樣的類型是有道理的。你可以看到參數是如何工作的。像('a -> 'a s) -> 'c t這樣的類型對我來說沒有意義。我沒有看到'c類型應該來自哪裏。 'a -> 'b s也是如此。我看不到'b應該來自哪裏。像這樣的類型通常與實際上不會返回的代碼(未定義代碼,引發異常的代碼等)關聯。

這是(非常)可能有GADT的一個微妙的,我不明白,但也許這將有助於至少一點。

+0

所以我想我想要完成的是有一個函數類型在城市,可以應用。 –