summaryrefslogtreecommitdiff
path: root/assignment-12/cashModel.dcl
blob: 6d1b4524d6e91fe116c2b0bd73cd8b231e767f5e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
definition module cashModel
/*
	Pieter Koopman, Radboud University, 2017
	pieter@cs.ru.nl
	Advanced programming

	A simple state model for an automated cash register
*/

import StdEnv, GenEq

:: Euro = {euro :: Int, cent :: Int}
:: Product = Pizza | Beer | Cola
:: Action = Add Product | Rem Product | Pay

class euro a :: a -> Euro
instance euro Product, Euro
instance euro Int, (Int, Int), [e] | euro e
instance + Euro
instance - Euro
instance zero Euro
derive gEq Euro
instance ~ Euro
instance == Euro, Product

model :: [Product] Action -> ([Product],[Euro])