[Haskell-beginners] Parsing

mike h mike_k_houghton at yahoo.co.uk
Fri Apr 14 19:12:14 UTC 2017


Hi David,

Thanks but I tried something like that before I posted. I’ll try again maybe I mistyped. 

Mike
> On 14 Apr 2017, at 19:17, David McBride <toad3k at gmail.com> wrote:
> 
> Try breaking it up into pieces.  There a literal "package" which is
> dropped.  There is a first identifier, then there are the rest of the
> identifiers (a list), then those two things are combined somehow (with
> :).
> 
> literal "package" *> (:) <$> identifier <*> restOfIdentifiers
> where
>  restOfIdentifiers :: Applicative f => f [String]
>  restOfIdentifiers = many ((:) <$> char '.' <*> identifier
> 
> I have not tested this code, but it should be close to what you are looking for.
> 
> On Fri, Apr 14, 2017 at 2:02 PM, mike h <mike_k_houghton at yahoo.co.uk> wrote:
>> 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
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners



More information about the Beginners mailing list