from Data.Monoid import class Semigroup, class Monoid
import mTask
+:: MTaskMSGRecv
+ = MTTaskAck Int
+ | MTTaskDelAck Int
+ | MTSDSAck Int
+ | MTSDSDelAck Int
+ | MTPub Int String
+ | MTMessage String
+ | MTEmpty
+
+:: MTaskMSGSend
+ = MTTask MTaskInterval String
+ | MTTaskDel Int
+ | MTSds Int String
+ | MTUpd Int String
+
+:: MTaskInterval
+ = OneShot
+ | OnInterval Int
+ | OnInterrupt Int
+
+instance toString MTaskInterval
+instance toString MTaskMSGRecv
+instance toString MTaskMSGSend
+encode :: MTaskMSGSend -> String
+decode :: String -> MTaskMSGRecv
+
:: BC
= BCNop
| BCLab Int
- | BCPush [Char]
+// | E.e: BCPush e & toByteCode e
+ | BCPush String
| BCPop
//SDS functions
| BCSdsStore Int
| BCJmp Int
| BCJmpT Int
| BCJmpF Int
+ //UserLED
+ | BCLedOn UserLED
+ | BCLedOff UserLED
//Serial
| BCSerialAvail
| BCSerialPrint
| BCDigitalWrite Pin
| BCTest AnalogPin
+derive gPrint BC
+derive class gCons BC
+
:: ByteCode a p = BC (BCState -> ([BC], BCState))
instance Semigroup (ByteCode a p)
instance Monoid (ByteCode a p)
+:: BCShare = {
+ sdsi :: Int,
+ sdspub :: Bool,
+ sdsval :: String
+ }
+
:: BCState = {
freshl :: [Int],
freshs :: [Int],
- sdss :: [(Int, [Char])]
+ sdss :: [BCShare]
}
instance zero BCState
-class toByteCode a :: a -> [Char]
-instance toByteCode Int
-instance toByteCode Bool
-instance toByteCode Char
-instance toByteCode String
-instance toByteCode Long
-instance toByteCode Button
+class toByteCode a :: a -> String
+class fromByteCode a :: String -> a
+class mTaskType a | toByteCode, fromByteCode, zero a
+
+instance toByteCode Int, Bool, Char, Long, String, Button, UserLED
+instance fromByteCode Int, Bool, Char, Long, String, Button, UserLED
+instance toByteCode MTaskInterval
+instance fromByteCode MTaskInterval
instance toChar Pin
instance arith ByteCode
instance boolExpr ByteCode
instance analogIO ByteCode
instance digitalIO ByteCode
+instance userLed ByteCode
instance If ByteCode Stmt Stmt Stmt
+instance If ByteCode e Stmt Stmt
instance If ByteCode Stmt e Stmt
-instance If ByteCode Stmt Stmt e
-instance If ByteCode x y Expr
+instance If ByteCode x y Stmt
instance IF ByteCode
instance noOp ByteCode
instance seq ByteCode
instance serial ByteCode
-getSDSBytes :: BCState -> String
-getTaskBytes :: Int String -> String
+toMessages :: MTaskInterval (String, BCState) -> ([MTaskMSGSend], BCState)
+toSDSUpdate :: Int Int -> [MTaskMSGSend]
-toByteVal :: BC -> [Char]
+toByteVal :: BC -> String
toReadableByteCode :: (ByteCode a b) -> (String, BCState)
-toRealByteCode :: (ByteCode a b) -> (String, BCState)
+toRealByteCode :: (ByteCode a b) BCState -> (String, BCState)