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 }