RWH 4.5.8 文字列専用の関数
import Data.Char (isSpace) myLines :: String -> [String] myLines [] = [] myLines cs = let (pre, suf) = myBreak (\c -> c == '\n') cs in pre : case suf of ('\n':rest) -> myLines rest _ -> [] myUnlines :: [String] -> String myUnlines [] = "\n" myUnlines (x:xs) | not $ null xs = x `myPlusPlus` "\n" `myPlusPlus` myUnlines xs | otherwise = x `myPlusPlus` "\n" myWords :: String -> [String] myWords "" = [] myWords cs = let (pre, suf) = myBreak isSpace cs in pre : myWords (myDropWhile isSpace suf) myUnwords :: [String] -> String myUnwords [] = "" myUnwords (x:[]) = x myUnwords (x:xs) = x `myPlusPlus` " " `myPlusPlus` myUnwords xs
myLines
は4.3のsplitLines
を参考に。そろそろかなりエレガントでない書き方になってる。えれふぁんとー