try to push real mTasks to the client
authorMart Lubbers <mart@martlubbers.net>
Thu, 29 Dec 2016 14:27:48 +0000 (15:27 +0100)
committerMart Lubbers <mart@martlubbers.net>
Thu, 29 Dec 2016 14:27:48 +0000 (15:27 +0100)
mTaskInterpret.dcl
miTask.icl

index 667f26b..fd22548 100644 (file)
@@ -2,6 +2,7 @@ definition module mTaskInterpret
 
 from Data.Functor.Identity import :: Identity
 from Control.Monad.State import :: State, :: StateT
+from Data.Monoid import class Semigroup, class Monoid
 import mTask
 
 :: BC
@@ -47,12 +48,14 @@ import mTask
        | 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
@@ -62,4 +65,23 @@ instance toByteCode String
 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
index 84b2563..a00d6f0 100644 (file)
@@ -13,8 +13,18 @@ Start world = startEngine mTaskTask world
 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} @! ()