> What am I missing?

You can combine booleans by '||', but 'Just n <- x' doesn't result to a boolean.

You can use '<|>' from 'Control.Applicative' to get the desired behavoir.

f x y
   | Just _ <- x <|> y = 1
   | otherwise           = 2

Greetings,
Daniel