Sign.hs revision 1aa11f4e4b984f2a6d6ce9700cbe82283c8d196a
887ec32ced6dc5d704e24a10568407ff7eefa503Christian Maeder{- |
1462186f844d3b541ab1542336e57586df486b51Christian MaederModule : $Header$
887ec32ced6dc5d704e24a10568407ff7eefa503Christian MaederDescription : signatures for FPL
1462186f844d3b541ab1542336e57586df486b51Christian MaederCopyright : (c) Christian Maeder, DFKI GmbH 2011
887ec32ced6dc5d704e24a10568407ff7eefa503Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
9e72bdb099564f9e5f51a069f05efba14bdbe2d7Christian MaederMaintainer : Christian.Maeder@dfki.de
887ec32ced6dc5d704e24a10568407ff7eefa503Christian MaederStability : provisional
077134553676bd8d6ad24dfa3622a30049cac9d7Christian MaederPortability : portable
cf1821d1617c189cc24428cfa654d3975f73755fChristian Maeder
signature extension for FPL to keep track of constructors
This signature type is complete unused currently and likely to change.
Constructors could also be kept directly via CASL as extra OpMap and thus
making this extension obsolete.
-}
module Fpl.Sign where
import Common.Doc
import Common.DocUtils
import Common.Id
import CASL.Sign
import qualified Data.Map as Map
import qualified Data.Set as Set
boolSort :: Id
boolSort = stringToId "Bool"
data SignExt = SignExt
{ constr :: Map.Map Id OpType
, freetypes :: Map.Map Id (Set.Set (Id, OpType)) }
deriving (Show, Eq, Ord)
instance Pretty SignExt where
pretty _ = empty
emptyFplSign :: SignExt
emptyFplSign = SignExt Map.empty Map.empty
addFplSign :: SignExt -> SignExt -> SignExt
addFplSign s1 s2 = s1
{ constr = Map.union (constr s1) $ constr s2
, freetypes = Map.unionWith Set.union (freetypes s1) $ freetypes s2 }
isSubFplSign :: SignExt -> SignExt -> Bool
isSubFplSign s1 s2 =
Map.isSubmapOf (constr s1) (constr s2) &&
Map.isSubmapOf (freetypes s1) (freetypes s2)