### Description This seems to more be an F# bug related to a unification error with F# anonymous record types (possibly a dotnet restriction?). ### Repro steps ```F# [ {|id=5; name = "hello"|} ] |> Util.Table ``` ### Expected behavior Table output ### Actual behavior Error message: >Type constraint mismatch. The type '{|id : int ; name : string|} list' is not compatible with type 'seq<{|id : int ; name : string|}>' ### Known workarounds Define it within a module: ```F# open System module MUtil = let Row (columns:seq<Reflection.PropertyInfo>) (item:'A) = columns |> Seq.map (fun p -> p.GetValue(item)) |> Seq.map Convert.ToString |> Seq.toArray let Table (items:seq<'A>, propertyNames:seq<string> option) = let properties = if propertyNames.IsSome then typeof<'A>.GetProperties() |> Seq.filter (fun x -> (propertyNames.Value |> Seq.exists (fun y -> x.Name = y))) |> Seq.toArray else typeof<'A>.GetProperties() { Columns = properties |> Array.map (fun x -> x.Name); Rows = items |> Seq.map (Test.MyRow properties) |> Seq.toArray } let DefaultTable items = Table (items, None) ``` Then call: ```F# [ {|id=5; name = "hello"|} ] |> MUtil.DefaultTable ``` ### Related information * Operating system: Ubuntu * Branch: Master * CoreCLR
Activity
rudihorn commentedon Jun 28, 2019
Questions I still have:
cgravill commentedon Jun 28, 2019
It's not a .NET Core issue.
I'd be tempted to just initialise as a seq or convert to that:
but improving compatibility seems like a good idea too.
cgravill commentedon Jun 28, 2019
To confirm the implicit conversion works for explict records:
IfSharp/src/IfSharp.Kernel/Util.fs
Lines 86 to 100 in 5a415a7
rudihorn commentedon Jun 28, 2019
Yes this is what was confusing me about this. The conversion to a seq first works for me though.