definition module mTaskInterpret import mTask from Data.Functor.Identity import :: Identity from Control.Monad.State import :: State, :: StateT 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 Int | MTTaskDelAck Int | MTSDSAck Int | MTSDSDelAck Int | MTPub Int BCValue | MTMessage String | MTDevSpec MTaskDeviceSpec | MTEmpty :: MTaskMSGSend = MTTask MTaskInterval String | MTTaskDel Int | MTShutdown | MTSds Int BCValue | MTUpd Int BCValue | MTSpec :: MTaskInterval = OneShot | OnInterval Int | OnInterrupt Int :: MTaskDeviceSpec = {haveLed :: Bool ,haveAio :: Bool ,haveDio :: Bool ,aPins :: Int ,dPins :: Int ,stackSize :: Int ,bytesMemory :: Int } :: BCValue = E.e: BCValue e & mTaskType, TC e instance == BCValue instance toString MTaskInterval instance toString MTaskMSGRecv instance toString MTaskMSGSend encode :: MTaskMSGSend -> String decode :: String -> MTaskMSGRecv :: BC = BCNop | BCLab Int | BCPush BCValue // | BCPush String | BCPop //SDS functions | BCSdsStore BCShare | BCSdsFetch BCShare | BCSdsPublish BCShare //Unary ops | BCNot //Binary Int ops | BCAdd | BCSub | BCMul | BCDiv //Binary Bool ops | BCAnd | BCOr //Binary ops | BCEq | BCNeq | BCLes | BCGre | BCLeq | BCGeq //Conditionals and jumping | BCJmp Int | BCJmpT Int | BCJmpF Int //UserLED | BCLedOn | BCLedOff //Serial | BCSerialAvail | BCSerialPrint | BCSerialPrintln | BCSerialRead | BCSerialParseInt //Pins | BCAnalogRead Pin | BCAnalogWrite Pin | BCDigitalRead Pin | BCDigitalWrite Pin //Return | BCReturn derive gPrint BCValue, MTaskDeviceSpec 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, MTaskDeviceSpec 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 , sdsval :: BCValue , sdsname :: String } :: BCState = { freshl :: Int, freshs :: Int, sdss :: [BCShare] } instance zero BCState 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, MTaskDeviceSpec instance arith ByteCode instance boolExpr ByteCode instance analogIO ByteCode instance digitalIO ByteCode instance aIO ByteCode instance dIO 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 retrn ByteCode instance sds ByteCode instance sdspub ByteCode instance assign ByteCode instance seq ByteCode instance serial ByteCode toMessages :: MTaskInterval (Main (ByteCode a b)) BCState -> ([MTaskMSGSend], BCState) toByteVal :: BC -> String toReadableByteCode :: (ByteCode a b) BCState -> (String, BCState) toRealByteCode :: (ByteCode a b) BCState -> (String, BCState)