2016-06-16 6 views
1

次のコード静的に解決型パラメータの追加表現

let inline foo< ^T, ^U when ^T : (member foo : (^U -> ^T) -> ^T -> ^T)> 
    (f:(^U -> ^T)) (t:^T) : ^T = 
    (^T : (member foo : (^U -> ^T) -> ^T -> ^T) f,t) 

let inline foo< ^T, ^U when ^T : (member foo : (^U -> ^T) -> ^T -> ^T)> (f:^U) (t:^T) : ^T = (^T : (member foo : (^U -> ^T) -> ^T -> ^T) f,t);; 
-----------------------------------------------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

/stdin(45,96): error FS0735: Expected 3 expressions, got 2 

このエラーを生成する期待し、私は本当に、その2式を期待し、なぜ取得いけませんか? 誰でもを解説することができますか?

THX

答えて

5

私はあなたが達成しようとしているかわからないんだけど、この作品:

let inline foo< ^T, ^U when ^T : (member foo : (^U -> ^T) -> ^T -> ^T)> 
    (f:(^U -> ^T)) (t:^T) : ^T = 
    (^T : (member foo : (^U -> ^T) -> ^T -> ^T) t, f, t) 

私はそれを理解するように、第一tからfooメソッドを抽出する必要があります^Tタイプのインスタンスです。

^Tのfooメソッドを静的にしたいとしますか?その場合には、次のコードは動作します:

このための
let inline foo2< ^T, ^U when ^T : (static member foo : (^U -> ^T) -> ^T -> ^T)> 
    (f:(^U -> ^T)) (t:^T) : ^T = 
    (^T : (static member foo : (^U -> ^T) -> ^T -> ^T) f, t) 
+0

http://stackoverflow.com/questions/37855555/how-can-unify-the-signature-of-this-member-method-and-インライン関数;-) しかし、実際にはあなたの質問に答えて - できるだけ多くのハスケルをエミュレートする試み – robkuz

+0

@robkuzハスケルのどの部分をエミュレートしようとしていますか? Haskell互換モジュール[here](https://github.com/gmpl/FSharpPlus/blob/master/FSharpPlus/Samples/Haskell.fsx)がありますか? – Gustavo

+0

ほとんどが型クラスをエミュレートしようとしています – robkuz

関連する問題