The advantage of Enum with Missing variant is that it's more expressive, and that you don't have to nest access in the Some matching.
Generally I prefer Option<Enum>, and often you can match directly with Some(Variant) to avoid nested matches.
The advantage of Enum with Missing variant is that it's more expressive, and that you don't have to nest access in the Some matching.
Generally I prefer Option<Enum>, and often you can match directly with Some(Variant) to avoid nested matches.
Strictly speaking, I think providing "map" just makes it functorial. Monadic would need a flatmap. (In addition to the other functor and monad requirements, of course.)
pure :: Monad m => a -> M a
(>>=) :: Monad m => M a -> (a -> M b) -> M b
pure is sometimes called return and >>= is sometimes called bind and flat map.I was unsure that bind was the same as flatmap but it looks like it is.
For example, the Option and Result type both have functions like "map", they do the same thing just on different types. They're not quite generic in that sense, but on a high level they seem so.
Another example are reactive libraries. Everything is pegged into some common operations like map, take, and so on.