如何在haskell中使用Parsec实现函数修剪?

时间:2015-03-06 03:56:40

标签: haskell parsec

我正在学习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

1 个答案:

答案 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) []