-
Notifications
You must be signed in to change notification settings - Fork 70
Open
Description
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
[ {|id=5; name = "hello"|} ] |> Util.TableExpected 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:
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:
[ {|id=5; name = "hello"|} ] |> MUtil.DefaultTableRelated information
- Operating system: Ubuntu
- Branch: Master
- CoreCLR
Metadata
Metadata
Assignees
Labels
No labels