from Data.Functor.Identity import :: Identity
from Control.Monad.State import :: State, :: StateT
+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
| BCJmp Int
| BCJmpT Int
| BCJmpF Int
+ //UserLED
+ | BCLedOn [Char]
+ | BCLedOff [Char]
//Serial
| BCSerialAvail
| BCSerialPrint
| BCTest AnalogPin
:: ByteCode a p = BC (BCState -> ([BC], BCState))
-//:: ByteCode a p = BC [BC]
-//:: ByteCode a p = BC ((ReadWrite (ByteCode a Expr)) BCState -> ([BC], BCState))
+instance Semigroup (ByteCode a p)
+instance Monoid (ByteCode a p)
+
+:: BCShare = {
+ sdsi :: Int,
+ sdspub :: Bool,
+ sdsval :: [Char]
+ }
+
:: BCState = {
freshl :: [Int],
- freshs :: [Int]
+ freshs :: [Int],
+ sdss :: [BCShare]
}
+instance zero BCState
class toByteCode a :: a -> [Char]
instance toByteCode Int
instance toByteCode String
instance toByteCode Long
instance toByteCode Button
+instance toByteCode UserLED
+//instance toByteCode 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 x y Stmt
+instance IF ByteCode
+instance noOp ByteCode
+
+instance sds ByteCode
+instance assign ByteCode
+instance seq ByteCode
+instance serial ByteCode
+
+toMessages :: MTaskInterval (String, BCState) -> ([MTaskMSGSend], BCState)
+toSDSUpdate :: Int Int -> [MTaskMSGSend]
toByteVal :: BC -> [Char]
+toReadableByteCode :: (ByteCode a b) -> (String, BCState)
+toRealByteCode :: (ByteCode a b) BCState -> (String, BCState)