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

Looks good.  Now why didn't I think of that?  I suppose I'm not yet
used to the fact that a stmt in a do-block can fail cleanly (i.e.
pattern-binding failure leads to a call of `fail', which is this case
is conveniently []).

| Neat, clean and Haskell 98. 

Indeed.  Thanks.
Regards,
    Malcolm




Reply via email to