module FunFM(FM,empty,lookup,update) where import Prelude hiding (lookup) import FM import Nat newtype FM v = FM (Nat->v) --instance Eq k => FiniteMap (FM k) k where instance FiniteMap FM where empty = emptyFM lookup = lookupFM update = updateFM emptyFM = FM . const lookupFM (FM f) = f updateFM k v (FM fm) = FM $ \ k' -> if k'==k then v else fm k' {-P: assert LookupUpdateFM = LookupUpdate lookupFM updateFM {-#cert:LookupUpdate#-} assert UpdateSameFM = UpdateSame lookupFM updateFM {-#cert:UpdateSame#-} assert UpdateOtherFM = UpdateOther lookupFM updateFM {-#cert:UpdateOther#-} -}