3 import StdEnv, StdGeneric, StdMaybe
10 import Control.GenBimap
15 import Data.GenType.CType
17 derive gType Either, Maybe, T, R, Frac, Tr, Fix, Odd, Even, SR, List, Enum, NT, Blurp, EnumList
21 :: SR = {f1 :: Int, f2 :: Bool}
22 :: R a = {f1 :: Maybe (R a), f2 :: Bool, f3 :: T a, f4 :: Char -> Dynamic,
23 f5 :: [([#Int], [#Int!], [!Int!], [!Int], [Int!])],
24 f6 :: ({!Int}, {R Bool}, {#Char}, {32#Int}),/*({!Int}, {#Char}, {R Bool})*/
26 :: Tr m b= Tr (m Int b)
27 :: Frac a = (/.) infixl 7 a a | Flurp
28 :: Fix f = Fix (f (Fix f))
30 :: List a = Cons a (List a) | Nil
32 :: Blurp a = Blurp (List a) | Blorp
34 :: EnumList = ECons Enum EnumList | ENil
37 ////Start = foldr (\i c->print i ["\n":c]) [] $ catMaybes $ map gTypeToType $ flattenGType $ unBox t
38 //:: Pair a b = Pair a b
39 //instance == (Pair a b) | == a where (==) (Pair a1 _) (Pair a2 _) = a1 == a2
40 //instance < (Pair a b) | < a where (<) (Pair a1 _) (Pair a2 _) = a1 < a2
41 :: Odd a = Odd (Even a) | OddBlurp
42 :: Even a = Even (Odd a) | EvenBlurp
44 Start = typedefs //$ (\x->[[gTypeToType x]])
45 // $ map (/*filter (not o isBuiltin) o*/ catMaybes o map gTypeToType)
47 $ map (map gTypeToType)
48 $ map (filter (not o isBasic))
53 //t :: Box GType (?# Int)
54 //t :: Box GType (Maybe [Maybe (Either Bool String)])
55 //t :: Box GType ([SR], Enum, T Int, NT, Blurp Int)
56 //t :: Box GType [EnumList]
57 //t :: Box GType (Tr Either Enum)
58 t :: Box GType (Odd Int, (), [Either (R (T *World)) (Frac Real)], Tr Either Bool, Fix Maybe)
69 //// , mab :: A.m: (m a) -> m b
70 //// , mba :: A.m: (m b) -> m a
73 //bm = {ab=id, ba=id}//, mab=id, mba=id}
76 // = GGBasicType BasicType
79 // | E.e: GGObject (BM a (OBJECT e)) GenericTypeDefDescriptor (GGType e)
80 // | E.e: GGRecord (BM a (RECORD e)) GenericRecordDescriptor (GGType e)
81 // | E.e: GGCons (BM a (CONS e)) GenericConsDescriptor (GGType e)
82 // | E.e: GGField (BM a (FIELD e)) GenericFieldDescriptor (GGType e)
83 // | E.l r: GGEither (BM a (EITHER l r)) (GGType l) (GGType r)
84 // | E.l r: GGPair (BM a (PAIR l r)) (GGType l) (GGType r)
85 // | E.l r: GGArrow (BM a (l -> r)) (GGType l) (GGType r)
87 //instance toString (GGType a)
89 // toString (GGBasicType t) = toString t
90 // toString GGUnit = "UNIT"
91 // toString (GGObject bm i e) = "(OBJECT " +++ i.gtd_name +++ " " +++ toString e +++ ")"
92 // toString (GGRecord bm i e) = "(RECORD " +++ i.grd_name +++ " " +++ toString e +++ ")"
93 // toString (GGCons bm i e) = "(CONS " +++ i.gcd_name +++ " " +++ toString e +++ ")"
94 // toString (GGField bm i e) = "(FIELD " +++ i.gfd_name +++ " " +++ toString e +++ ")"
95 // toString (GGEither bm l r) = "(EITHER " +++ toString l +++ " " +++ toString r +++ ")"
96 // toString (GGPair bm l r) = "(PAIR " +++ toString l +++ " " +++ toString r +++ ")"
98 //ggtypemap :: (.a -> .b) (.b -> .a) u:(GGType .a) -> u:GGType .b
99 //ggtypemap ab ba (GGBasicType t) = (GGBasicType t)
100 //ggtypemap ab ba GGUnit = GGUnit
101 //ggtypemap ab ba (GGObject bm i a) = GGObject {bm & ab=bm.ab o ba, ba=ab o bm.ba} i a
102 //ggtypemap ab ba (GGRecord bm i a) = GGRecord {bm & ab=bm.ab o ba, ba=ab o bm.ba} i a
103 //ggtypemap ab ba (GGCons bm i a) = GGCons {bm & ab=bm.ab o ba, ba=ab o bm.ba} i a
104 //ggtypemap ab ba (GGField bm i a) = GGField {bm & ab=bm.ab o ba, ba=ab o bm.ba} i a
105 //ggtypemap ab ba (GGEither bm l r) = GGEither {bm & ab=bm.ab o ba, ba=ab o bm.ba} l r
106 //ggtypemap ab ba (GGPair bm l r) = GGPair {bm & ab=bm.ab o ba, ba=ab o bm.ba} l r
107 //ggtypemap ab ba (GGArrow bm l r) = GGArrow {bm & ab=bm.ab o ba, ba=ab o bm.ba} l r
109 //bimap{|GGType|} ab ba t = ggtypemap ab ba t
111 //generic ggType a :: GGType a
112 //ggType{|UNIT|} = GGUnit
113 //ggType{|OBJECT of gtd|} f = GGObject bm gtd f
114 //ggType{|CONS of gcd|} f = GGCons bm gcd f
115 //ggType{|RECORD of grd|} f = GGRecord bm grd f
116 //ggType{|FIELD of gfd|} f = GGField bm gfd f
117 //ggType{|EITHER|} fl fr = GGEither bm fl fr
118 //ggType{|PAIR|} fl fr = GGPair bm fl fr
120 //ggType{|Int|} = GGBasicType BTInt
121 //ggType{|Bool|} = GGBasicType BTBool
122 //ggType{|Real|} = GGBasicType BTReal
123 //ggType{|Char|} = GGBasicType BTChar
124 //ggType{|World|} = GGBasicType BTWorld
125 //ggType{|Dynamic|} = GGBasicType BTDynamic
126 //ggType{|File|} = GGBasicType BTFile
128 //ggType{|(->)|} fl fr = GGArrow bm fl fr
129 ////ggType{|[#]|} f = GGUList ULLazy f
130 ////ggType{|[#!]|} f = GGUList ULStrict f
131 ////ggType{|{}|} f = GGArray ALazy f
132 ////ggType{|{!}|} f = GGAray AStrict f
133 ////ggType{|{#}|} f = GGArray AUnboxed f
134 ////ggType{|{32#}|} f = GGArray APacked f