data Maybe (a) where Nothing : Maybe (a) Just : a -> Maybe (a) fromJust : Maybe (a) -> a fromJust a = case a of Just a => a fromMaybe : a -> Maybe (a) -> a fromMaybe a b = case b of Just a => a Nothing => a maybe : b -> (a -> b) -> Maybe (a) -> b maybe b f ma = case ma of Just a => f a Nothing => b