instance sds ByteCode where
sds f = {main = BC $ freshs
- >>= \sdsi->pure {BCShare | sdsi=sdsi,sdsval=BCValue 0}
- >>= \sds->pure (f (tell` [BCSdsFetch sds]))
- >>= \(v In bdy)->modify (addSDS sds v)
- >>| unBC (unMain bdy)}
- where
- addSDS sds v s = {s & sdss=[{sds & sdsval=BCValue v}:s.sdss]}
-
+ >>= \sdsi->pure {BCShare | sdsname="", sdsi=sdsi, sdsval=BCValue 0}
+ >>= \sds ->pure (f $ tell` [BCSdsFetch sds])
+ >>= \(v In bdy)->modify (addSDS sds v)
+ >>| unBC (unMain bdy)}
+ where
+ addSDS sds v s = {s & sdss=[{sds & sdsval=BCValue v}:s.sdss]}
con f = undef
+instance namedsds ByteCode where
+ namedsds f = {main = BC $ freshs
+ >>= \sdsi->pure {BCShare | sdsname="", sdsi=sdsi, sdsval=BCValue 0}
+ >>= \sds ->pure (f $ tell` [BCSdsFetch sds])
+ >>= \(v Named n In bdy)->modify (addSDS sds n v)
+ >>| unBC (unMain bdy)}
+ where
+ addSDS sds n v s = {s & sdss=[{sds & sdsname=n, sdsval=BCValue v}:s.sdss]}
+
instance sdspub ByteCode where
pub (BC x) = BC $ censor (\[BCSdsFetch s]->[BCSdsPublish s]) x
instance == BCShare where (==) a b = a.sdsi == b.sdsi
//Start = toMessages (OnInterval 500) $ toRealByteCode (unMain bc) zero
-Start = fst $ toReadableByteCode (unMain $ bc) zero
-//Start = fst $ toReadableByteCode (unMain $ blink LED1) zero
-//Start = let (bcs, st) = toReadableByteCode (unMain bc) zero
-// in (bcs, st.sdss)
+//Start = [fst $ toReadableByteCode (unMain $ p0) zero
+// ,'Text'.concat $ compile p0
+// ]
+Start = toReadableByteCode (unMain $ p0) zero
where
-// bc = {main = ledOn (lit LED1)}
-// bc = sds \x=5 In
-// sds \y=4 In
-// {main = If (y ==. lit 0) (pub x) (x =. x *. y :. y =. y -. lit 1)}
+ p0 :: (Main (a Int Expr)) | assign, namedsds, sds, arith a
+// p0 = sds \x = 6 In {main = x =. x *. lit 7}
+ p0 = namedsds \x = 6 Named "x" In {main = x =. x *. lit 7}
+
bc = {main =
IF (analogRead A0 >. lit 50)
( digitalWrite D0 (lit True) )