I'm trying to create a dictionary with structural equality in F# and I want to pass through several dictionary constructor overloads.
In C# this would look like
class StructuralDictionary<Key, Value> : Dictionary<Key, Value> where Key : IEquatable<Key>
{
public StructuralDictionary() : base() { }
public StructuralDictionary(IDictionary<Key, Value> dict) : base(dict) { }
public StructuralDictionary(IEqualityComparer<Key> keyComparer) : base(keyComparer) { }
}
The F# docs have section demonstrating this usecase, but I can't get it to compile
type StructuralDictionary<'key, 'value when 'key:equality> =
new (dictionary:IDictionary<'key,'value>) = { inherit Dictionary<'key,'value>(dictionary) }
new () = { inherit Dictionary<'key, 'value> () }
Ah. I was missing a
inheritat the topI got a bit confused because I started with a primary constructor like
But that doesn't work. So I tried to move the primary constructor down, but also moved the inheritance declaration so it still didn't compile.
It turns out to overload constructors you must have inherits at the top of the type declaration but you must not specify a primary constructor at the top.