RWH p.92 練習問題 1, 2

-- 1
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 xs = Just $ myLast xs

safeInit :: [a] -> Maybe [a]
safeInit [] = Nothing
safeInit xs = Just $ myInit xs

-- 2
{-
splitWith :: (a -> Bool) -> [a] -> [[a]]
splitWith _ [] = []
splitWith f cs =
    let (pre, suf) = myBreak (not . f) cs
    in pre: splitWith f (myDropWhile (not . f) suf)
-}

1。safeLastsafeInitは空リストNothingを返して、空でなければ普通にlastinitを呼んだ結果をJustでラップして返す。
2。Falseを返す要素で切るのでnot . fか。
2はコメントのid:trad11の指摘にある通り誤り。うーん、しばらくHaskell触ってなかったからコードが読みづらいわー……