------------------------------------------------------------------------- -- -- StoreTest.hs -- -- An abstract data type of stores of integers, together with -- QuickCheck generator. -- -- (c) Addison-Wesley, 1996-2011. -- ------------------------------------------------------------------------- module StoreTest ( Store, initial, -- Store value, -- Store -> Var -> Integer update -- Store -> Var -> Integer -> Store ) where import Test.QuickCheck -- Var is the type of variables. type Var = Char -- The implementation is given by a newtype declaration, with one -- constructor, taking an argument of type [ (Integer,Var) ]. data Store = Store [ (Integer,Var) ] instance Eq Store where (Store sto1) == (Store sto2) = (sto1 == sto2) instance Show Store where showsPrec n (Store sto) = showsPrec n sto -- initial :: Store initial = Store [] value :: Store -> Var -> Integer value (Store []) v = 0 value (Store ((n,w):sto)) v | v==w = n | otherwise = value (Store sto) v update :: Store -> Var -> Integer -> Store update (Store sto) v n = Store ((n,v):sto) -- QuickCheck stuff instance Arbitrary Store where arbitrary = do list <- listOf element return $ Store list where element = do n <- arbitrary v <- elements ['a'..'z'] return (n,v)