data Maybe a = Nothing
             | Just a
               deriving (Eq, Ord, Show)

a `safeDiv` 0 = Nothing
a `safeDiv` b = Just (a `div` b)

safeHead []    = Nothing
safeHead (x:_) = Just x

