How to constrain one type parameter by another

No :(. This is one of the most unfortunate limitations of F# at the moment (in my opinion). See the Solving Subtype Constraints section of the spec, which states that

New constraints of the form type :> ‘b are solved again as type=”b.

This is really a shame since otherwise we could work around F#”s lack of generic variance:

let cvt<'a,'b when 'a :> 'b> (s:seq<'a>) : seq<'b> = // doesn't compile
  s |> box |> unbox

Leave a Comment