При переносе некоторого кода на последнюю версию F#, включенную в VS2010 b1, я столкнулся с проблемой и хотел бы знать, есть ли доступный обходной путь, а если нет, то почему поведение компилятора F# было изменено, чтобы не поддержать сценарий.
type Foo(a) =
[<OverloadID("CurriedAbc")>]
member public x.Abc (p:(oneType * anotherType) seq) otherParm = method impl...
//this overload exists for better compatibility with other languages
[<OverloadID("TupledAbc")>]
member public x.Abc (p:Dictionary<oneType, anotherType>, otherParm) =
x.Abc(p |> Seq.map(fun kvp -> (kvp.Key, kvp.Value))) otherParm
Этот код выдает следующую ошибку времени компиляции:
error FS0191: One or more of the overloads of this method has curried arguments. Consider redesigning these members to take arguments in tupled form
Обратите внимание, что раньше это работало безупречно на F# 1.9.6.2 (сентябрьская CTP)