5
この場合、インライン処理が機能しないのはなぜですか?タプル用のインライン展開はなぜ機能しないのですか?
type TupleBuilder() =
static member inline Cons(a,(b,c)) = (a, b, c)
static member inline Cons(a,(b,c,d)) = (a, b, c, d)
static member inline Cons(a,(b,c,d,e)) = (a, b, c, d, e)
let inline cons h t = TupleBuilder.Cons(h,t)
TupleBuilder.Cons
への呼び出しは私に
A unique overload for method 'Cons' could not be determined based on type
information prior to this program point. A type annotation may be needed.
Candidates:
static member TupleBuilder.Cons : a:'a0 * ('a1 * 'a2 * 'a3 * 'a4) -> 'a0 * 'a1 * 'a2 * 'a3 * 'a4,
static member TupleBuilder.Cons : a:'a0 * ('a1 * 'a2 * 'a3) -> 'a0 * 'a1 * 'a2 * 'a3,
static member TupleBuilder.Cons : a:'a0 * ('a1 * 'a2) -> 'a0 * 'a1 * 'a2
コンパイラは、 'cons'関数で' t'の要素数を知っていますか?使用法を見ることなく、 't'が2タプル、3タプル、または4タプルであるかどうかはわかりません。 – rmunn
通常、 'inlining'はコールサイトにその決定を遅らせるのに役立ちます。しかし、ここではありません。だから私は不思議です – robkuz