4 ms·
I'm curious, why couldn't the list of generic types play nice with functions operating on lists of interfaces?
by aeonik 3y ago
I'm curious, why couldn't the list of generic types play nice with functions operating on lists of interfaces?
- deleted 3y ago[deleted]
- ryanjshaw 3y agoHave a look here: https://onecompiler.com/fsharp/3ztmx2uhr https://onecompiler.com/fsharp/3ztmx2uhr Basically we want a "Yes" or a "No" when the family has children: let kidsYN = family |> numberOfChildren |> yesOrNo But we get: error FS0001: Type mismatch. Expecting a INode list but given a Node<Person> list The type 'INode' does not match the type 'Node<Person>' Forcing us to do: let familyAsINode = family |> List.map (fun n -> n :> INode) Sure you can wrap this up in a function but it's ugly and annoying to have to use this everywhere and takes away from your logic. It ends up being better to split your "batch" and "scalar" operations and compose them e.g. by introducing a "mapsum" function: let kidsYN2 = family |> mapsum numberOfChildrenV2 |> yesOrNo