Adding constant fields to F# discriminated unions

discriminated-union, f#, playing-cards

Solution

Just for completeness this is what is meant:

type Suit = 
  | Clubs
  | Diamonds
  | Hearts
  | Spades
  with
    override this.ToString() =
        match this with
        | Clubs -> "C"
        | Diamonds -> "D"
        | Hearts -> "H"
        | Spades -> "S"

Problem

Is it possible to add constant field values to F# discriminated unions? Can I do something like this? ``` type Suit | Clubs("C") | Diamonds("D") | Hearts("H") | Spades("S") with override this.ToString() = // print out the letter associated with the specific item end ``` If I were writing a Java enum, I would add a private value to the constructor like so: ``` public enum Suit { CLUBS("C"), DIAMONDS("D"), HEARTS("H"), SPADES("S"); private final String symbol; Suit(final String symbol) { this.symbol = symbol; } @Override public String toString() { return symbol; } } ```

Original source