------------------------------------------------------------------------- -- -- StoreFun.hs -- -- An abstract data type of stores of integers, implemented as functions. -- -- (c) Addison-Wesley, 1996-2011. -- ------------------------------------------------------------------------- -- An alternative implementation of Store.hs. Note that although -- it is equivalent to the list implementation as far as the operations -- initial, value, update are concerned, it is not possible to compare for -- equality or to show as a String. module StoreFun ( Store, initial, -- Store value, -- Store -> Var -> Integer update -- Store -> Var -> Integer -> Store ) where -- Var is the type of variables. type Var = Char newtype Store = Store (Var -> Integer) -- initial :: Store initial :: Store initial = (Var -> Integer) -> Store Store (\Var v -> Integer 0) value :: Store -> Var -> Integer value :: Store -> Var -> Integer value (Store Var -> Integer sto) Var v = Var -> Integer sto Var v update :: Store -> Var -> Integer -> Store update :: Store -> Var -> Integer -> Store update (Store Var -> Integer sto) Var v Integer n = (Var -> Integer) -> Store Store (\Var w -> if Var vVar -> Var -> Bool forall a. Eq a => a -> a -> Bool ==Var w then Integer n else Var -> Integer sto Var w)