[<Flags>]
type LikeMatch =
| None = 0
| Start = 1
| End = 2
| All = Start ||| End //ERROR: Unexpected identifier in union case
I've also tried qualifying the members with the enum type. Is there a way to do this in F#?
The idea of Enum Flags is to take an enumeration variable and allow it hold multiple values. It should be used whenever the enum represents a collection of flags, rather than representing a single value. Such enumeration collections are usually manipulated using bitwise operators.
The [Flag] attribute is used when Enum represents a collection of multiple possible values rather than a single value. All the possible combination of values will come. The [Flags] attribute should be used whenever the enumerable represents a collection of possible values, rather than a single value.
The "|=" operator actually adds a flag to the enum, so the enum now contains two flag bits. You can use "|=" to add bits, while & will test bits without setting them. And Bitwise AND returns a value with 1 in the targeted bit if both values contain the bit.
As JaredPar says it's not allowed by the language, but F# does have binary literals which makes it easy to show which bits are being set:
open System
[<Flags>]
type LikeMatch =
| None = 0b000000000
| Start = 0b000000001
| End = 0b000000010
| All = 0b000000011
According to the F# language reference there is no way to do this. The right hand side of the = sign in a F# enum must be an integer literal
Grammar
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With