from Data.Functor.Identity import :: Identity
from Control.Monad.State import :: State, :: StateT
+from Data.Monoid import class Semigroup, class Monoid
import mTask
:: BC
| 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)
+
:: BCState = {
freshl :: [Int],
freshs :: [Int]
}
+instance zero BCState
class toByteCode a :: a -> [Char]
instance toByteCode Int
instance toByteCode Long
instance toByteCode Button
+instance toChar Pin
+instance arith ByteCode
+instance boolExpr ByteCode
+instance analogIO ByteCode
+instance digitalIO ByteCode
+instance If ByteCode Stmt Stmt Stmt
+instance If ByteCode Stmt e Stmt
+instance If ByteCode Stmt Stmt e
+instance If ByteCode x y Expr
+instance IF ByteCode
+instance noOp ByteCode
+
+instance sds ByteCode
+instance assign ByteCode
+instance seq ByteCode
+instance serial ByteCode
+
toByteVal :: BC -> [Char]
+toReadableByteCode :: (ByteCode a Expr) -> String
+toRealByteCode :: (ByteCode a Expr) -> String
mTaskTask :: Task ()
mTaskTask = withShared ([],False,[],False) (\ch->
syncNetworkChannel "localhost" 8123 "\n" id id ch ||-
+ sendByteCode ||-
updateSharedInformation "channels" [] ch @! ())
+sendByteCode :: Task ()
+sendByteCode = viewInformation "send" [] "4" @! ()
+// (toReadableByteCode (unMain bc)) @! ()
+ where
+ bc :: Main (ByteCode Int Expr)
+ bc = sds \x=41 In
+ sds \y=1 In
+ {main = x =. x +. y}
+
syncNetworkChannel :: String Int String (String -> m) (m -> String) (Shared ([m],Bool,[m],Bool)) -> Task () | iTask m
syncNetworkChannel server port msgSeparator decodeFun encodeFun channel
= tcpconnect server port channel {ConnectionHandlers|onConnect=onConnect,whileConnected=whileConnected,onDisconnect=onDisconnect} @! ()