10 import Control.Applicative
12 :: Structmaker a = SM (Int [String] -> [String]) | Onzin a
14 runSM :: (Structmaker a) -> (Int [String] -> [String])
17 generic gToStruct a :: Structmaker a
18 gToStruct{|Int|} = SM \_ c->["int":c]
19 gToStruct{|Real|} = SM \_ c->["double":c]
20 gToStruct{|Bool|} = SM \_ c->["bool":c]
22 gToStruct{|UNIT|} = SM \_->id
23 gToStruct{|EITHER|} fl fr = SM \i->runSM fl i o runSM fr i
24 gToStruct{|PAIR|} fl fr
25 = SM \i c->runSM fl i [" f", toString i, "; ":runSM fr (i+1) c]
27 gToStruct{|OBJECT of gtd|} f
28 | gtd.gtd_num_conses == 0 = SM (runSM f)
30 ["struct clean_", gtd.gtd_name, " {\n"
36 gToStruct{|CONS of gcd|} f = SM \i c->["struct { ":runSM f i ["} ", gcd.gcd_name, ";\n":c]]
37 gToStruct{|RECORD of grd|} f
39 ["struct clean_", grd.grd_name, " {\n"
42 gToStruct{|FIELD of gfd|} f = SM \i c->runSM f i [gfd.gfd_name,";\n":c]
52 :: DHTType = DHT11 | DHT12 | DHT22
54 derive gToStruct DHTDetails
55 derive gToStruct DHTType
57 derive gToStruct Record
60 (concat (runSM s 0 [])
61 ,concat (runSM s` 0 [])
70 s :: (Structmaker DHTDetails)
73 s` :: (Structmaker Record)