我正在学习Parsec
并希望通过实施函数trim
来练习它。这是我的代码:
module Trim where
import Text.ParserCombinators.Parsec hiding(spaces)
trim = reverse.trimFront.reverse.trimFront
trimFront :: String->String
trimFront = readExpr trimParser
readExpr :: Parser String->String->String
readExpr parser input = case parse parser "trim" input of
Left err -> error $ show err
Right val -> val
spaces = many space
trimParser :: Parser String
trimParser = spaces >> many anyChar
我的问题是,如何直接在函数trim
中实现trimParser
而无需先实现trimFront
?
答案 0 :(得分:2)
修剪字符串两边的空格:
trim :: String -> String
trim = dropWhileEnd isSpace . dropWhile isSpace
请注意,根据具体情况,您最好使用dropWhileEnd
的以下实现,而不是Data.List
的实现:
dropWhileEnd :: (a -> Bool) -> [a] -> [a]
dropWhileEnd p = foldr
(\x xs -> if null xs && p x then [] else x : xs) []