Search code examples
haskellparsec

Is this idiomatic use of Text.Parsec?


My use of Text.Parsec is a little rusty. If I just want to return the matched string is this idiomatic?

category :: Stream s m Char => ParsecT s u m [Char]                        
category = concat <$> (many1 $ (:) <$> char '/' <*> (many1 $ noneOf "/\n"))

I feel like there might be an existing operator for liftM concat . many1 or (:) <$> p1 <*> p2 that I'm ignoring, but I'm not sure.


Solution

  • That's fine, I think. A little judicious naming would make it prettier:

    category = concat <$> many1 segment
      where
        segment = (:) <$> char '/' <*> many1 (noneOf "/\n")