headMay :: [a] -> Maybe a
headMay [] = Nothing
headMay (h:_) = Just h
tailMay :: [a] -> Maybe [a]
tailMay [] = Nothing
tailMay (_:t) = Just t
lookupMay :: Eq a => a -> [(a, b)] -> Maybe b
lookupMay item [] = Nothing
lookupMay item ((k,v):ks)
| item == k = Just v
| otherwise = lookupMay item ks
divMay :: (Eq a, Fractional a) => a -> a -> Maybe a
divMay _ 0 = Nothing
divMay n d = Just (n / d)
maximumMay :: Ord a => [a] -> Maybe a
maximumMay [] = Nothing
maximumMay l = Just (maximum l)
minimumMay :: Ord a => [a] -> Maybe a
minimumMay [] = Nothing
minimumMay l = Just (minimum l)