reset a3, kut Charlie ;)
[tt2015.git] / a3 / code / hellogast.icl
1 module hellogast
2
3 import gast
4
5 derive bimap []
6
7 //derive ggen State
8 derive ggen Input
9 //derive ggen Output
10
11 derive gEq State
12 derive gEq Input
13 derive gEq Output
14
15 derive genShow State
16 derive genShow Input
17 derive genShow Output
18
19 derive gLess State
20
21 :: State = S0 | S1 | S2
22 :: Input = Coin | Button
23 :: Output = Tea | Coffee | Coin`
24
25 coffee1 :: State Input -> [Trans Output State]
26 coffee1 S0 Coin = [Pt [Coin`] S0, Pt [] S1]
27 coffee1 S1 Coin = [Pt [] S2]
28 coffee1 S1 Button = [Pt [Tea] S0]
29 coffee1 S2 Button = [Pt [Coffee] S0]
30 coffee1 s input = [Pt [] s]
31
32 m1 :: Int Input -> ([Output], Int)
33 m1 n Coin = ([], n+1)
34 m1 1 Button = ([Tea], 0)
35 m1 2 Button = ([Coffee], 0)
36 m1 n input = ([], n)
37
38 Start world = testConfSM [] coffee1 S0 m1 0 (\_ . 0) world