2016-06-19 10 views
5

以下のコードを参照してください。seq型パラメータを持つ関数がレコードフィールドの場合、リストまたは配列を受け入れません。

let x = Seq.head [1.0; 2.0] // This is ok. 

type Func<'T> = { f: seq<'T> -> 'T } 

let func = { f = Seq.head } 

// Compilation error: This expression was expected to have type seq<obj> but here has type 'a list 
let y = func.f [1.0; 2.0] 

let z = func.f ([1.0; 2.0] |> List.toSeq) // This is ok. 

なぜSeq.headとfund.fの動作が異なるのか分かりません。コンパイラのバグのようです。しかし、これが設計であれば、誰かが私に少し説明するのを助けることができますか?どうもありがとう!

答えて

6

以下のドン・サイム(github.com/fsharp)からの回答です:

これは仕様によるものです。 「14.4.3関数とメンバの使用のための柔軟性の暗黙的な挿入」と呼ばれるルールは、レコードフィールドの使用ではなく、関数とメンバの使用にのみ適用されます。

関連する問題