If you are using the ParseLib from the Hugs distribution, the function you are looking for is mzero:
C:\Hugs98\lib\hugs\ParseLib.hs: instance MonadPlus Parser where -- mzero :: Parser a mzero = P (\inp -> []) -- mplus :: Parser a -> Parser a -> Parser a (P p) `mplus` (P q) = P (\inp -> (p inp ++ q inp)) For the explanations on how this function works and why it has such a name you can take a look at the following paper: Monadic parser combinators Graham Hutton and Erik Meijer. Technical Report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996. http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing Regards, Leonid Bouriakovsky > Hi, there. I am glad to join Haskell community. :) > > Here I have a question about Parser: how to make a > parser explicitly "fail"? > > My question arises from the syntax below: > > <statement>::=<keyword><seperator><variable> > <keyword>::="define" > <seperator>::=':' > <variable>::=identifier other than <keyword> > <identifier>::=(<letter>)+ > <letter>::=a..z|A..Z > > Now I am thinking of writing a Parser for variable. My > thought is: > > variable::Parser String > variable = do s<-identifier > if not (s=="define") then return s else > --let parser fail > > I will be very happy if there is some mechanism to > implement the "else" branch, for I have thought of it > for long. :) > > __________________________________________________ > Do you Yahoo!? > Yahoo! Tax Center - forms, calculators, tips, more > http://taxes.yahoo.com/ > _______________________________________________ > Haskell mailing list > [EMAIL PROTECTED] > http://www.haskell.org/mailman/listinfo/haskell _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
