definition module mTaskInterpret
+import mTask
+
from Data.Functor.Identity import :: Identity
from Control.Monad.State import :: State, :: StateT
-from Data.Monoid import class Semigroup, class Monoid
-import mTask
+from Control.Monad.RWST import :: RWST, :: RWS
+from Data.Either import :: Either
+from iTasks._Framework.Generic.Defaults import generic gDefault
+from GenPrint import generic gPrint
+from Generics.gCons import class gCons, generic conses, generic consName, generic consIndex, generic consNum
:: MTaskMSGRecv
= MTTaskAck Int
| OnInterval Int
| OnInterrupt Int
+:: BCValue = E.e: BCValue e & mTaskType e
+
instance toString MTaskInterval
instance toString MTaskMSGRecv
instance toString MTaskMSGSend
:: BC
= BCNop
| BCLab Int
- | BCPush [Char]
+ | BCPush BCValue
+// | BCPush String
| BCPop
//SDS functions
| BCSdsStore Int
| BCJmpT Int
| BCJmpF Int
//UserLED
- | BCLedOn [Char]
- | BCLedOff [Char]
+ | BCLedOn
+ | BCLedOff
//Serial
| BCSerialAvail
| BCSerialPrint
| BCDigitalWrite Pin
| BCTest AnalogPin
-:: ByteCode a p = BC (BCState -> ([BC], BCState))
-instance Semigroup (ByteCode a p)
-instance Monoid (ByteCode a p)
+derive gPrint BCValue
+derive consIndex BCValue
+derive consName BCValue
+derive conses BCValue
+derive consNum BCValue
+
+derive class gCons Long, UserLED, Button, AnalogPin, DigitalPin, PinMode, Pin
+derive class iTask UserLED, Long, Pin, Button, AnalogPin, DigitalPin, PinMode
+derive gEditor BCValue
+derive gText BCValue
+derive JSONEncode BCValue
+derive JSONDecode BCValue
+derive gDefault BCValue
+derive gEq BCValue
+
+:: ByteCode a p = BC (RWS () [BC] BCState ())
:: BCShare = {
sdsi :: Int,
sdspub :: Bool,
- sdsval :: [Char]
+ sdsval :: BCValue
}
:: BCState = {
}
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
-instance toByteCode UserLED
-//instance toByteCode MTaskInterval
-
-instance toChar Pin
+class toByteCode a :: a -> String
+class fromByteCode a :: String -> a
+class mTaskType a | toByteCode, fromByteCode, iTask, TC a
+
+instance toByteCode Int, Bool, Char, Long, String, Button, UserLED, BCValue
+instance fromByteCode Int, Bool, Char, Long, String, Button, UserLED, BCValue
+instance toByteCode MTaskInterval
+instance fromByteCode MTaskInterval
+
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 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
toMessages :: MTaskInterval (String, BCState) -> ([MTaskMSGSend], BCState)
toSDSUpdate :: Int Int -> [MTaskMSGSend]
-toByteVal :: BC -> [Char]
-toReadableByteCode :: (ByteCode a b) -> (String, BCState)
+toByteVal :: BC -> String
+toReadableByteCode :: (ByteCode a b) BCState -> (String, BCState)
toRealByteCode :: (ByteCode a b) BCState -> (String, BCState)