definition module Smurf from StdOverloaded import class zero, class toString, class toChar, class fromChar, class == from GenEq import generic gEq from Data.Maybe import ::Maybe :: Stm = Push String | Input | Output | Cat | Head | Tail | Quotify | Put | Get | Exec :: Program :== [Stm] :: Stack :== [String] :: Store :== [(String, String)] :: State = { stack :: Stack , store :: Store } derive gEq Stm instance == Stm instance toString Stm instance toChar Stm instance fromChar Stm instance zero State instance toString State step :: !Program State !*File -> *(Maybe (!Program, State), *File) run :: !Program State *File -> *(Maybe State, *File)