[Haskell-beginners] Parsing
mike h
mike_k_houghton at yahoo.co.uk
Fri Apr 14 18:02:37 UTC 2017
I have
data PackageDec = Pkg String deriving Show
and a parser for it
packageP :: Parser PackageDec
packageP = do
literal “package"
x <- identifier
xs <- many ((:) <$> char '.' <*> identifier)
return $ Pkg . concat $ (x:xs)
so I’m parsing for this sort of string
“package some.sort.of.name”
and I’m trying to rewrite the packageP parser in applicative style. As a not quite correct start I have
packageP' :: Parser PackageDec
packageP' = literal "package" >> Pkg . concat <$> many ((:) <$> char '.' <*> identifier)
but I can’t see how to get the ‘first’ identifier into this sequence - i.e. the bit that corresponds to x <- identifier in the
monadic version.
in ghci
λ-> :t many ((:) <$> char '.' <*> identifier)
many ((:) <$> char '.' <*> identifier) :: Parser [[Char]]
so I think that somehow I need to get the ‘first’ identifier into a list just after Pkg . concat so that the whole list gets flattened and everybody is happy!
Any help appreciated.
Thanks
Mike
More information about the Beginners
mailing list