we are trying to build the Haskell-MaybeMonad sample from http://www.haskell.org/all_about_monads/html/maybemonad.html in F#.
The idea is to search for a mailaddress in
There's always Lazy, which is effectively what you have here but with different syntax:
let mplus m1 (m2 : Lazy<'a option>) =
match m1 with
| Some _ as m -> m
| None -> m2.Force()
let (+) = mplus
let lookUp name = maybe {
let! combined = fullNamesDb.TryFind name + lazy (nickNamesDb.TryFind name)
return! prefsDb.TryFind combined
}