Conversion.hs revision 8d97ef4f234681b11bb5924bd4d03adef858d2d2
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder{- |
c63ebf815c8a874525cf18670ad74847f7fc7b26Christian MaederModule : $Header$
456238178f89e5a3de2988ee6c8af924297d52d9Christian MaederCopyright : (c) Klaus L�ttich, Uni Bremen 2002-2005
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
456238178f89e5a3de2988ee6c8af924297d52d9Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederMaintainer : maeder@tzi.de
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederStability : provisional
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian MaederPortability : portable
43b4c41fbb07705c9df321221ab9cb9832460407Christian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maederthe class ShATermConvertible and a few instances
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder-}
f2f9df2e17e70674f0bf426ed1763c973ee4cde0Christian Maeder
c9a7e6af169a2adfb92f42331cd578065ed83a2bChristian Maedermodule Common.ATerm.Conversion(
c9a7e6af169a2adfb92f42331cd578065ed83a2bChristian Maeder ShATermConvertible,
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder toShATerm, -- :: ATermTable -> t -> (ATermTable,Int)
e7757995211bd395dc79d26fe017d99375f7d2a6Christian Maeder fromShATerm, -- :: ATermTable -> t
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder toShATermList, -- :: ATermTable -> [t] -> (ATermTable,Int)
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder fromShATermList, -- :: ATermTable -> [t]
a1ed34933c266ce85066acb0d7b20c90cb8eb213Christian Maeder fromShATermError, -- :: String -> ShATerm -> a
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder ) where
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettich
b1f59a4ea7c96f4c03a4d7cfcb9c5e66871cfbbbChristian Maederimport Common.ATerm.AbstractSyntax
ad270004874ce1d0697fb30d7309f180553bb315Christian Maederimport Data.List (mapAccumL)
4d56f2fa72e4aec20eb827c11ed49c8cbb7014bdChristian Maederimport Data.Ratio
4cb215739e9ab13447fa21162482ebe485b47455Christian Maederimport Data.Typeable
8ef75f1cc0437656bf622cec5ac9e8ea221da8f2Christian Maeder
404166b9366552e9ec5abb87a37c76ec8a815fb7Klaus Luettichclass Typeable t => ShATermConvertible t where
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder -- functions for conversion to an ATermTable
74eed04be26f549d2f7ca35c370e1c03879b28b1Christian Maeder toShATerm :: ATermTable -> t -> (ATermTable,Int)
d23b0cc79c0d204e6ec758dff8d0ba71c9f693f7Christian Maeder toShATermList :: ATermTable -> [t] -> (ATermTable,Int)
3e8b136f23ed57d40ee617f49bcac37830b58cabChristian Maeder fromShATerm :: ATermTable -> t
ef9e8535c168d3f774d9e74368a2317a9eda5826Christian Maeder fromShATermList :: ATermTable -> [t]
3e8b136f23ed57d40ee617f49bcac37830b58cabChristian Maeder
ef9e8535c168d3f774d9e74368a2317a9eda5826Christian Maeder -- default functions ignore the Annotation part
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder toShATermList att0 ts = case mapAccumL toShATerm att0 ts of
e593b89bfd4952698dc37feced21cefe869d87a2Christian Maeder (att1, inds) -> addATerm (ShAList inds []) att1
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder
5191fa24c532d1f67e7a642e9aece65efb8a0975Christian Maeder fromShATermList att =
7cc09dd93962a2155c34d209d1d4cd7d7b838264Christian Maeder case getATerm att of
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder ShAList ats _ ->
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder map (\ i -> fromShATerm (getATermByIndex1 i att)) ats
51d769d55d88dfa88bdf54bee78d8fa85a2deba8Christian Maeder u -> fromShATermError "[a]" u
f041c9a6bda23de33a38490e35b831ae18d96b45Christian Maeder
7cc09dd93962a2155c34d209d1d4cd7d7b838264Christian MaederfromShATermError :: String -> ShATerm -> a
51d769d55d88dfa88bdf54bee78d8fa85a2deba8Christian MaederfromShATermError t u = error $ "Cannot convert ShATerm to "
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder ++ t ++ ": " ++ err u
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maeder where err te = case te of
c3053d57f642ca507cdf79512e604437c4546cb9Christian Maeder ShAAppl s l _ -> "!ShAAppl "++ s
dcbd32289a7bdf1e6edd06c6ab0698c6a9dbf37aChristian Maeder ++ " (" ++ show (length l) ++ ")"
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder ShAList l _ -> "!ShAList"
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder ++ " (" ++ show (length l) ++ ")"
dcbd32289a7bdf1e6edd06c6ab0698c6a9dbf37aChristian Maeder ShAInt i _ -> "!ShAInt " ++ show i
05a62e84edac8c64de04f8349dee418598d216b9Christian Maeder
05a62e84edac8c64de04f8349dee418598d216b9Christian Maeder-- some instances -----------------------------------------------
1aee4aaddde105264c1faf394d88e302c05094ffChristian Maederinstance ShATermConvertible Bool where
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder toShATerm att b = case b of
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder True -> addATerm (ShAAppl "T" [] []) att
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder False -> addATerm (ShAAppl "F" [] []) att
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder fromShATerm att = case getATerm att of
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder ShAAppl "T" [] _ -> True
8b767d09a78927b111f5596fdff9ca7d2c1a439fChristian Maeder ShAAppl "F" [] _ -> False
456238178f89e5a3de2988ee6c8af924297d52d9Christian Maeder u -> fromShATermError "Prelude.Bool" u
d54cd08a4cfa26256c38d8ed12c343adbfe1a0e3Christian Maeder
23b4e542dca35852f58d1fb3f7d9078c1de5ab06Christian Maederinstance ShATermConvertible Integer where
8a78868bae2ec6838c87366c35c57e109154c51eChristian Maeder toShATerm att x = addATerm (ShAInt x []) att
8cacad2a09782249243b80985f28e9387019fe40Christian Maeder fromShATerm att = case getATerm att of
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder ShAInt x _ -> x
a7c27282e71cf4505026645f96d4f5cb8a284e32Christian Maeder u -> fromShATermError "Prelude.Integer" u
363939beade943a02b31004cea09dec34fa8a6d9Christian Maeder
8a28707e9155465c6f2236a06eac6580a65c7025Christian Maederinstance ShATermConvertible Int where
f04e8f3ff56405901be968fd4c6e9769239f1a9bKlaus Luettich toShATerm att x = toShATerm att (toInteger x)
4e23d551da8fb051cc4752319740ae7858ef1044Christian Maeder fromShATerm att = integer2Int $ fromShATerm att
797ccd67cb8ae127be097cd43448801b673e3b69Christian Maeder
431d34c7007a787331c4e5ec997badb0f8190fc7Christian Maederinstance (ShATermConvertible a, Integral a)
f1541d4a151dbd08002dbd14e7eb1d5dde253689Christian Maeder => ShATermConvertible (Ratio a) where
498aa48bdb931ab50990d3b74318a5db2312186cChristian Maeder toShATerm att0 i = let (i1, i2) = (numerator i, denominator i) in
f1541d4a151dbd08002dbd14e7eb1d5dde253689Christian Maeder case toShATerm att0 i1 of
6dc9bc98d0854fe2e3dd3bfc4275096a0c28ee1cChristian Maeder (att1,i1') ->
6dc9bc98d0854fe2e3dd3bfc4275096a0c28ee1cChristian Maeder case toShATerm att1 i2 of
6dc9bc98d0854fe2e3dd3bfc4275096a0c28ee1cChristian Maeder (att2,i2') ->
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder addATerm (ShAAppl "Ratio" [i1',i2'] []) att2
61fa0ac06ede811c7aad54ec4c4202346727368eChristian Maeder fromShATerm att =
c0c2380bced8159ff0297ece14eba948bd236471Christian Maeder case getATerm att of
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder ShAAppl "Ratio" [i1',i2'] _ ->
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder case fromShATerm (getATermByIndex1 i1' att) of
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder i1 ->
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder case fromShATerm (getATermByIndex1 i2' att) of
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder i2 -> (i1 % i2)
9e748851c150e1022fb952bab3315e869aaf0214Christian Maeder u -> fromShATermError "Prelude.Integral" u
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maederinstance ShATermConvertible Char where
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder toShATerm att c = addATerm (ShAAppl (show [c]) [] []) att
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder fromShATerm att = case getATerm att of
ca074a78b8dcccbb8c419586787882f98d0c6163Christian Maeder ShAAppl s [] _ -> str2Char s
63f0e65a37b95621334db9ee4ba0cd9d826f5c0fChristian Maeder u -> fromShATermError "Char" u
6a79849bed67264c396dddb3e9c184bdfc1a1bc9Christian Maeder toShATermList att s = addATerm (ShAAppl (show s) [] []) att
a5e5b8c3e5c11177e5034ef2423813a5d28979edChristian Maeder fromShATermList att = case getATerm att of
bc8cbf12aa172bf5673b92a9e7a0151d4aa4c315Christian Maeder ShAAppl s [] _ -> read s
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder u -> fromShATermError "String" u
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder
51d769d55d88dfa88bdf54bee78d8fa85a2deba8Christian Maederinstance ShATermConvertible () where
a5e5b8c3e5c11177e5034ef2423813a5d28979edChristian Maeder toShATerm att _ = addATerm (ShAAppl "U" [] []) att
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder fromShATerm att = case getATerm att of
bc8cbf12aa172bf5673b92a9e7a0151d4aa4c315Christian Maeder ShAAppl "U" [] _ -> ()
2d130d212db7208777ca896a7ecad619a8944971Christian Maeder u -> fromShATermError "()" u
f4a2a20e49f41b2afa657e5e64d9e349c7faa091Christian Maeder