[Alex] Feature request: Create a customizable state monad AlexState

Alain Cremieux alcremi at pobox.com
Sat Feb 16 18:13:18 EST 2008


Hi,

In Alex, very often I need to include elements in the basic monad of the 
wrapper ALEX_MONAD.
For instance if I want to record the level of a comment, or a list of 
the comments.

Several years ago I hacked the file wrapper.hs to include my own 
elements, by defining another entry point:

#ifdef ALEX_MONAD
data AlexState = AlexState {
        alex_pos :: !AlexPosn,  -- position at current input location
        alex_inp :: String,     -- the current input
        alex_chr :: !Char,      -- the character before the input
        alex_scd :: !Int        -- the current startcode
*/#ifdef ALEX_MONAD_USER_STATE
  , alex_ust :: AlexUserState -- defined in the user program
#endif
/*    }


and

runAlex :: String -> Alex a -> Either String a
runAlex input (Alex f)
   = case f (AlexState {alex_pos = alexStartPos,
                        alex_inp = input,
                        alex_chr = '\n',
*/#ifdef ALEX_MONAD_USER_STATE
            alex_ust = alexInitUserState,
#endif
/*                        alex_scd = 0}) of Left msg -> Left msg
                                          Right ( _, a ) -> Right a

This way I can define my own elements, and initialize them.

Now I'd like to have this change integrated in the development tree.
Has anyone another idea as how to obtain the same result (knowing that 
now there are 2 variants, whith normal chars and with bytestrings) ? How 
would other Alex users do that ?

Thanks,
Alain



More information about the Libraries mailing list