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
    }
