Sign.hs revision 1a38107941725211e7c3f051f7a8f5e12199f03a
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder{-# LANGUAGE DeriveDataTypeable #-}
c63ebf815c8a874525cf18670ad74847f7fc7b26Christian Maeder{- |
456238178f89e5a3de2988ee6c8af924297d52d9Christian MaederModule : $Header$
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederDescription : HolLight signature
456238178f89e5a3de2988ee6c8af924297d52d9Christian MaederCopyright : (c) Jonathan von Schroeder, DFKI GmbH 2010
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederLicense : GPLv2 or higher, see LICENSE.txt
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederMaintainer : jonathan.von_schroeder@dfki.de
43b4c41fbb07705c9df321221ab9cb9832460407Christian MaederStability : experimental
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederPortability : portable
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maeder-}
c9a7e6af169a2adfb92f42331cd578065ed83a2bChristian Maeder
c9a7e6af169a2adfb92f42331cd578065ed83a2bChristian Maedermodule HolLight.Sign where
456238178f89e5a3de2988ee6c8af924297d52d9Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederimport Data.Typeable
456238178f89e5a3de2988ee6c8af924297d52d9Christian Maederimport qualified Data.Map as Map
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichimport Common.DocUtils
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichimport Common.Doc
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichimport Common.Result
a53841f6d6e86ac751c12a33dc8aadf53f59d977Klaus Luettichimport HolLight.Term
a737caf82de97c1907027c03e4b4509eb492b4b8Christian Maederimport HolLight.Helper
456238178f89e5a3de2988ee6c8af924297d52d9Christian Maeder
68d10d143f29fcff3c637ba24f90e983995ceae6Christian Maederdata Sign = Sign { types :: Map.Map String Int
96646aed2ae087b942ae23f15bbe729a8f7c43d3Christian Maeder , ops :: Map.Map String HolType }
01e383014b555bbcf639c0ca60c5810b3eff83c0Christian Maeder deriving (Eq, Ord, Show, Typeable)
3b06e23643a9f65390cb8c1caabe83fa7e87a708Till Mossakowski
9dac90ec2be2a72e03893095461960d483fe2fc2Christian MaederprettyTypes :: Map.Map String Int -> Doc
5e5d3e82af3bc2834f8718a52d9f45da80220273Dominik LueckeprettyTypes = ppMap text (\ i -> if i < 1 then empty else parens (pretty i))
124c859ba4741d5e36d5d98634886b430b7af093Christian Maeder (const id) sepByCommas (<>)
ce8b15da31cd181b7e90593cbbca98f47eda29d6Till Mossakowski
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maederinstance Pretty Sign where
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder pretty s = keyword "types" <+> prettyTypes (types s)
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder $++$ ppMap text ppPrintType
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder (const id) vcat (\ a -> (a <+> colon <+>)) (ops s)
a1ed34933c266ce85066acb0d7b20c90cb8eb213Christian Maeder
c0c2380bced8159ff0297ece14eba948bd236471Christian MaederemptySig :: Sign
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus LuettichemptySig = Sign {types = Map.empty, ops = Map.empty }
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian Maeder
ad270004874ce1d0697fb30d7309f180553bb315Christian MaederisSubSig :: Sign -> Sign -> Bool
4d56f2fa72e4aec20eb827c11ed49c8cbb7014bdChristian MaederisSubSig s1 s2 = types s1 `Map.isSubmapOf` types s2
4cb215739e9ab13447fa21162482ebe485b47455Christian Maeder && ops s1 `Map.isSubmapOf` ops s2
8ef75f1cc0437656bf622cec5ac9e8ea221da8f2Christian Maeder
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus LuettichsigUnion :: Sign -> Sign -> Result Sign
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian MaedersigUnion (Sign {types = t1, ops = o1})
74eed04be26f549d2f7ca35c370e1c03879b28b1Christian Maeder (Sign {types = t2, ops = o2}) =
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder return Sign {types = t1 `Map.union` t2, ops = o1 `Map.union` o2}
8d97ef4f234681b11bb5924bd4d03adef858d2d2Christian Maeder