2014-11-11 2 views
0

Я не знаю, почему это происходитсдерживающими в Seq.scan

//fine, type of xs is Set<int> 
    let e = Seq.scan (fun xs   x -> Set.add x xs) Set.empty [1..2] 

    //bad, type of xs is Set<obj>, no type check no good 
    let e = Seq.scan (fun(xs:Set<_>) x -> Set.add x xs) Set.empty [1..2] 

Должно быть мои глаза, но что это дает?

+0

Это 'Set ' для меня в обоих случаях. – Daniel

+0

Это странно ... действительно, когда я вставляю его в другой файл, я не могу воспроизвести его. это должно быть связано с открытием модуля (?). HOLD FIRE – nicolas

+0

Так что, действительно, какая-то другая библиотека в пространстве имен я открыл переопределенный набор <_>. Set.add ссылается на FSharp Set <_>, хороший, а Set <_> ссылается на злую! – nicolas

ответ

1

Как уточнено в комментарии, я был , открыв пространство имен другой библиотеки в моем файле.

Будучи C# библиотеки, она переопределяет своих Set (бедные людей)

Это, написание Set<_> индуцированного компилятор в собирании их версии, в то время как Set.add еще refered доверенного FSharp Set<_>.

В конце концов, двое пришли в жестокой голове, чтобы сражаться друг с другом.

Смежные вопросы