module hellogast import gast derive bimap [] //derive ggen State derive ggen Input //derive ggen Output derive gEq State derive gEq Input derive gEq Output derive genShow State derive genShow Input derive genShow Output derive gLess State :: State = S0 | S1 | S2 :: Input = Coin | Button :: Output = Tea | Coffee | Coin` coffee1 :: State Input -> [Trans Output State] coffee1 S0 Coin = [Pt [Coin`] S0, Pt [] S1] coffee1 S1 Coin = [Pt [] S2] coffee1 S1 Button = [Pt [Tea] S0] coffee1 S2 Button = [Pt [Coffee] S0] coffee1 s input = [Pt [] s] m1 :: Int Input -> ([Output], Int) m1 n Coin = ([], n+1) m1 1 Button = ([Tea], 0) m1 2 Button = ([Coffee], 0) m1 n input = ([], n) Start world = testConfSM [] coffee1 S0 m1 0 (\_ . 0) world