Your question is a bit confusing because you are talking about Option
Option
, but then showing a type that is your own Option2
type containing Option
.
I'm going to suggest that your question is really this: Some (Some x)
collapses to Some x
?
The answer is no. This collapse will indirectly change the type, and you will lose some of the type security that Option
provides. And the distinction between minimized and non-minimized versions can be important. Take this example.
match List.tryHead [Some 1; None; Some 2] with | Some (Some x) -> sprintf "The first item exists with a value of %i" x | Some None -> "The first item exists but it has no value" | None -> "The list was empty"
The List.tryHead
function returns the first element of the list, or None if the list is empty. We give it the Option<int>
list so that it returns Option<Option<int>>
We can match return values ββto cover all possible cases of this type of return. This can be useful if you want to handle these cases differently.
But we still have the opportunity to consider Some None
and None
as equivalent:
match List.tryHead [Some 1; None; Some 2] with | Some (Some x) -> sprintf "The first item exists with a value of %i" x | _ -> "No value found"
source share