Allow returning bool instead of unit option for partial active patterns
I propose we allow returning bool from partial active patterns that don't return a significant value apart from "matches" / "doesn't match".
The existing way of approaching this problem in F# is to return Some () if the value matches and None if it doesn't.
For example the active pattern for the following:
match key with
| CaseInsensitive "foo" -> ...
| CaseInsensitive "bar" -> ...
would currently be written as:
let (|CaseInsensitive|_|) (pattern: string) (value: string) =
if String.Equals(value, pattern, StringComparison.OrdinalIgnoreCase) then
Some ()
else
None
With this proposal, it could be written as:
let (|CaseInsensitive|_|) (pattern: string) (value: string) =
String.Equals(value, pattern, StringComparison.OrdinalIgnoreCase)
Pros and Cons
The advantages of making this adjustment to F# are
- A simpler way to write active patterns that just check a condition without returning a value.
- Fewer memory allocations and probably better generated IL.
The disadvantages of making this adjustment to F# are
- Adding one more way to do the same thing.
Extra information
Estimated cost (XS, S, M, L, XL, XXL): S
Related suggestions:
Affidavit (please submit!)
Please tick this by placing a cross in the box:
Please tick all that apply:
For Readers
If you would like to see this issue implemented, please click the 👍 emoji on this issue. These counts are used to generally order the suggestions by engagement.
Allow returning bool instead of unit option for partial active patterns
I propose we allow returning bool from partial active patterns that don't return a significant value apart from "matches" / "doesn't match".
The existing way of approaching this problem in F# is to return
Some ()if the value matches andNoneif it doesn't.For example the active pattern for the following:
would currently be written as:
With this proposal, it could be written as:
Pros and Cons
The advantages of making this adjustment to F# are
The disadvantages of making this adjustment to F# are
Extra information
Estimated cost (XS, S, M, L, XL, XXL): S
Related suggestions:
ValueSome ()would still result in worse IL thantrue.Affidavit (please submit!)
Please tick this by placing a cross in the box:
Please tick all that apply:
For Readers
If you would like to see this issue implemented, please click the 👍 emoji on this issue. These counts are used to generally order the suggestions by engagement.