Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: Beginners Digest, Vol 106, Issue 7 (Andrey Klaus) ---------------------------------------------------------------------- Message: 1 Date: Tue, 18 Apr 2017 15:39:28 +0300 From: Andrey Klaus <deepminds...@gmail.com> To: beginners@haskell.org Subject: Re: [Haskell-beginners] Beginners Digest, Vol 106, Issue 7 Message-ID: <cafsn60tl4qnfumtbsmdheb91be5oz0nm+gfydnjiibvt2dz...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Hello everybody, A small question. ----- packageP = do literal “package" ----- what is the "literal" in this code? My problem is $ ghc ParserTest.hs [1 of 1] Compiling ParserTest ( ParserTest.hs, ParserTest.o ) ParserTest.hs:11:5: Not in scope: ‘literal’ $ ghc --version The Glorious Glasgow Haskell Compilation System, version 7.10.3 Is this because I use old version of software? Thanks, Andrey 2017-04-14 21:58 GMT+03:00 <beginners-requ...@haskell.org>: > Send Beginners mailing list submissions to > beginners@haskell.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > or, via email, send a message with subject or body 'help' to > beginners-requ...@haskell.org > > You can reach the person managing the list at > beginners-ow...@haskell.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Beginners digest..." > > > Today's Topics: > > 1. Parsing (mike h) > 2. Re: Parsing (David McBride) > 3. Re: Parsing (Francesco Ariis) > 4. Re: Parsing (mike h) > 5. Re: Parsing (mike h) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Fri, 14 Apr 2017 19:02:37 +0100 > From: mike h <mike_k_hough...@yahoo.co.uk> > To: The Haskell-Beginners Mailing List - Discussion of primarily > beginner-level topics related to Haskell <beginners@haskell.org> > Subject: [Haskell-beginners] Parsing > Message-ID: <2c66c9dc-30af-41c5-b9af-0d1da19e0...@yahoo.co.uk> > Content-Type: text/plain; charset=utf-8 > > 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 > > > > > > > > ------------------------------ > > Message: 2 > Date: Fri, 14 Apr 2017 14:17:42 -0400 > From: David McBride <toa...@gmail.com> > To: The Haskell-Beginners Mailing List - Discussion of primarily > beginner-level topics related to Haskell <beginners@haskell.org> > Subject: Re: [Haskell-beginners] Parsing > Message-ID: > <CAN+Tr42ifDF62sXo6WDq32rBAPHQ+eqTkJeuk-dNr8pDfRSZXg@mail. > gmail.com> > Content-Type: text/plain; charset=UTF-8 > > 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_hough...@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@haskell.org > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > ------------------------------ > > Message: 3 > Date: Fri, 14 Apr 2017 20:35:32 +0200 > From: Francesco Ariis <fa...@ariis.it> > To: beginners@haskell.org > Subject: Re: [Haskell-beginners] Parsing > Message-ID: <20170414183532.ga4...@casa.casa> > Content-Type: text/plain; charset=utf-8 > > On Fri, Apr 14, 2017 at 07:02:37PM +0100, mike h 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 > > Hello Mike, > > I am not really sure what you are doing here? You are parsing a dot > separated list (like.this.one) but at the end you are concatenating all > together, why? > Are you sure you are not wanting [String] instead of String? > > If so, Parsec comes with some handy parser combinators [1], maybe one of > them could fit your bill: > > -- should work > packageP = literal "package" *> Pkg <$> sepEndBy1 identifier (char '.') > > [1] https://hackage.haskell.org/package/parsec-3.1.11/docs/ > Text-Parsec-Combinator.html > > > ------------------------------ > > Message: 4 > Date: Fri, 14 Apr 2017 20:12:14 +0100 > From: mike h <mike_k_hough...@yahoo.co.uk> > To: The Haskell-Beginners Mailing List - Discussion of primarily > beginner-level topics related to Haskell <beginners@haskell.org> > Subject: Re: [Haskell-beginners] Parsing > Message-ID: <ff162cde-e7e8-421b-a92e-057a643ee...@yahoo.co.uk> > Content-Type: text/plain; charset=utf-8 > > 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 <toa...@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_hough...@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@haskell.org > >> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > _______________________________________________ > > Beginners mailing list > > Beginners@haskell.org > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > > ------------------------------ > > Message: 5 > Date: Fri, 14 Apr 2017 20:19:40 +0100 > From: mike h <mike_k_hough...@yahoo.co.uk> > To: The Haskell-Beginners Mailing List - Discussion of primarily > beginner-level topics related to Haskell <beginners@haskell.org> > Subject: Re: [Haskell-beginners] Parsing > Message-ID: <d208c2b2-6e38-427d-9eaf-b9ea8532d...@yahoo.co.uk> > Content-Type: text/plain; charset="utf-8" > > Hi Francesco, > Yes, I think you are right with "Are you sure you are not wanting [String] > instead of String?” > > I could use Parsec but I’m building up a parser library from first > principles i.e. > > newtype Parser a = P (String -> [(a,String)]) > > parse :: Parser a -> String -> [(a,String)] > parse (P p) = p > > and so on…. > > It’s just an exercise to see how far I can get. And its good fun. So maybe > I need add another combinator or to what I already have. > > Thanks > > Mike > > > > On 14 Apr 2017, at 19:35, Francesco Ariis <fa...@ariis.it> wrote: > > > > On Fri, Apr 14, 2017 at 07:02:37PM +0100, mike h 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 > > > > Hello Mike, > > > > I am not really sure what you are doing here? You are parsing a dot > > separated list (like.this.one) but at the end you are concatenating all > > together, why? > > Are you sure you are not wanting [String] instead of String? > > > > If so, Parsec comes with some handy parser combinators [1], maybe one of > > them could fit your bill: > > > > -- should work > > packageP = literal "package" *> Pkg <$> sepEndBy1 identifier (char > '.') > > > > [1] https://hackage.haskell.org/package/parsec-3.1.11/docs/ > Text-Parsec-Combinator.html <https://hackage.haskell.org/ > package/parsec-3.1.11/docs/Text-Parsec-Combinator.html> > > _______________________________________________ > > Beginners mailing list > > Beginners@haskell.org <mailto:Beginners@haskell.org> > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners < > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners> > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: <http://mail.haskell.org/pipermail/beginners/ > attachments/20170414/66a17133/attachment.html> > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > ------------------------------ > > End of Beginners Digest, Vol 106, Issue 7 > ***************************************** > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20170418/f74a8a54/attachment.html> ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 106, Issue 11 ******************************************