> > 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