safeHead :: [a] -> Maybe a safeHead [] = Nothing safeHead (x:_) = Just x safeTail :: [a] -> Maybe [a] safeTail [] = Nothing safeTail (_:xs) = Just xs safeLast :: [a] -> Maybe a safeLast [] = Nothing safeLast[x] = Just x safeLast (_:xs) = safeLast xs safeInit :: [a] -> Maybe [a] safeInit [] = Nothing safeInit [_] = Just [] safeInit (x:xs) = fmap ([x] ++) (safeInit xs)