Resemble state monad interface from haskell. Because there is no higher kinded type, typeclass functions are hard coded.