ARDSL project
*/
-import StdEnv, StdGeneric
+import StdEnv, StdGeneric, GenBimap, _SystemStrictLists
generic consName a :: a -> String
consName{|CONS of {gcd_name}|} f x = gcd_name
consName{|Int|} i = toString i
consName{|Bool|} b = toString b
consName{|Char|} c = toString c
+consName{|String|} s = s
+consName{|[]|} _ _ = "[]"
consName{|(->)|} f g x = g (x undef)
generic consIndex a :: a -> Int
consIndex{|Int|} i = i
consIndex{|Bool|} b = if b 1 0
consIndex{|Char|} c = toInt c
+consIndex{|String|} _ = 0
+consIndex{|[]|} _ _ = 0
+
+generic conses a :: [a]
+conses{|CONS|} f = [CONS (hd f)]
+conses{|UNIT|} = [UNIT]
+conses{|PAIR|} f g = []
+conses{|EITHER|} f g = map LEFT f ++ map RIGHT g
+conses{|OBJECT|} f = map OBJECT f
+conses{|RECORD|} f = map RECORD f
+conses{|FIELD|} f = map FIELD f
+conses{|Int|} = [0]
+conses{|Bool|} = [True]
+conses{|Char|} = ['\0']
+conses{|Real|} = [0.0]
+conses{|String|} = [""]
+conses{|[]|} _ = [[ ]]
+conses{|[!]|} _ = [[!]]
+conses{|[ !]|} _ = [[ !]]
+conses{|[!!]|} _ = [[!!]]
+conses{|{}|} _ = [{}]
+conses{|{!}|} _ = [{!}]
+conses{|()|} = [()]
+conses{|(->)|} _ _ = [const undef]