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