Morphism.hs revision 967e5f3c25249c779575864692935627004d3f9e
967e5f3c25249c779575864692935627004d3f9eChristian Maeder{- |
967e5f3c25249c779575864692935627004d3f9eChristian MaederModule : $Header$
967e5f3c25249c779575864692935627004d3f9eChristian MaederCopyright : (c) Christian Maeder and Uni Bremen 2002-2003
967e5f3c25249c779575864692935627004d3f9eChristian MaederLicence : All rights reserved.
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian MaederMaintainer : hets@tzi.de
967e5f3c25249c779575864692935627004d3f9eChristian MaederStability : provisional
967e5f3c25249c779575864692935627004d3f9eChristian MaederPortability : non-portable (via imports)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian MaederMorphism on 'Env' (as for CASL)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder-}
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian Maedermodule HasCASL.Morphism where
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian Maederimport HasCASL.Le
967e5f3c25249c779575864692935627004d3f9eChristian Maederimport HasCASL.Merge
967e5f3c25249c779575864692935627004d3f9eChristian Maederimport Common.Result
967e5f3c25249c779575864692935627004d3f9eChristian Maederimport Data.Dynamic
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian Maederdata Morphism = Morphism {msource,mtarget :: Env}
967e5f3c25249c779575864692935627004d3f9eChristian Maeder deriving (Eq, Show)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian MaedermorphismTc :: TyCon
967e5f3c25249c779575864692935627004d3f9eChristian MaedermorphismTc = mkTyCon "HasCASL.Morphism.Morphism"
967e5f3c25249c779575864692935627004d3f9eChristian Maederinstance Typeable Morphism where
967e5f3c25249c779575864692935627004d3f9eChristian Maeder typeOf _ = mkAppTy morphismTc []
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian MaedermkMorphism :: Env -> Env -> Morphism
967e5f3c25249c779575864692935627004d3f9eChristian MaedermkMorphism e1 e2 = Morphism e1 e2
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian MaederideMor :: Env -> Morphism
967e5f3c25249c779575864692935627004d3f9eChristian MaederideMor e = mkMorphism e e -- plus identity functions
967e5f3c25249c779575864692935627004d3f9eChristian MaedercompMor :: Morphism -> Morphism -> Morphism
967e5f3c25249c779575864692935627004d3f9eChristian MaedercompMor m1 m2 = Morphism (msource m1) (mtarget m2) -- plus composed functions
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian MaederlegalEnv :: Env -> Bool
967e5f3c25249c779575864692935627004d3f9eChristian MaederlegalEnv _ = True -- maybe a closure test?
967e5f3c25249c779575864692935627004d3f9eChristian MaederlegalMor :: Morphism -> Bool
967e5f3c25249c779575864692935627004d3f9eChristian MaederlegalMor m = legalEnv (msource m) && legalEnv (mtarget m) -- and what else?
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian MaedermorphismUnion :: Morphism -> Morphism -> Result Morphism
967e5f3c25249c779575864692935627004d3f9eChristian MaedermorphismUnion m1 m2 = do s <- merge (msource m1) $ msource m2
967e5f3c25249c779575864692935627004d3f9eChristian Maeder t <- merge (mtarget m1) $ mtarget m2
967e5f3c25249c779575864692935627004d3f9eChristian Maeder return $ mkMorphism s t
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian Maeder