In Haskell, you can represent a state machine and its current state using an iteratee:
http://www.yesodweb.com/blog/2010/09/enumerators-tutorial-pa...
An iteratee is essentially just a function that takes an input symbol and returns either a final state value or another iteratee.