> > 3. Inadequacy of Haskell
> > There are a few places where MW relies on the preprocessor rather than
> > Haskell.  Xtract has this code:
> > ---------From ParseSTXml.hs--------
> > #define PARSEARG(tok)  P (\st inp -> case inp of { \
> >                                       ((p,tok n):ts) -> [(n,st,ts)]; \
> >                                       ts -> [] } )
> > name :: Parser SymTab Token Name
> > name =  PARSEARG(TokName)
> >
> > string, freetext :: Parser SymTab Token String
> > string =   PARSEARG(TokName)
> > freetext = PARSEARG(TokFreeText)
> > -------
> > Is there clean a way of achieving the same functionality
> > without relying on the preprocessor?
> >

Think ABSTRACTIONS and MONADS. Hows about....

name :: Parser SymTabs Token Name
name =  do
        (_,TokName n) <- item
        return n

string :: Parser SymTabs Token String
string =  do
        (_,TokName n) <- item
        return n
        
freetext :: Parser SymTabs Token String
freetext =  do
        (_,TokFreeText n) <- item
        return n

Neat, clean and Haskell 98. 

Andy Gill




Reply via email to