2011-04-22 73 views
0

我的問題就不會結束採取提取參數...F# - 從Expr的

我有以下功能:

let hasMany (expr:Expr<'a -> seq<'b>>) 

現在我想從Expr提取seq<'b>,因爲我需要投它到一個ICollection<'b>並將其重新包裝到一個新的Expr - 爲什麼不只是讓它需要一個Expr需要ICollection<'b>首先你可能會問 - 簡單的用戶需要先投到ICollection<'b>,其中我我試圖避免,因爲我正在創建一個圖書館那將被別人使用,而我希望它變得簡單和乾淨。

短:我如何從Expr提取seq<'b>

回答

3

你的問題對我沒有意義。鑑於你的類型,沒有seq<'b>expr - expr是一個表達式包裝函數其中返回 a seq<'b>。舉例來說,你已經拿到了簽名,這將是有效的調用

hasMany <@ id @> 

因爲id可以給出類型'b seq -> 'b seq。但是,顯然<@ id @>不包含seq<'b>

如果你所要求的是你的Expr<'a -> seq<'b>>轉換爲Expr<'a -> ICollection<'b>>,那就試試這個:

let hasMany (expr : Expr<'a -> 'b seq>) = 
    <@ fun x -> (%expr) x :?> ICollection<'b> @> 
+0

+1打我吧! – 2011-04-22 20:15:55