fn (Just q) (Just z) = q + z fn _ _ = 0
fn = liftM2 (+)
You're missing the point entirely.
> the original example gets rid of the Maybe, defaulting to 0.
http://hackage.haskell.org/package/base-4.10.1.0/docs/Data-M...
fn x y = case (x, y) of (Just q, Just z) -> q + z (_, _) -> 0
At the same level, really - it works in a let or a where as well.