BCValue is existential now
[mTask.git] / mTaskInterpret.dcl
index 999d734..d104b02 100644 (file)
@@ -1,10 +1,14 @@
 definition module mTaskInterpret
 
 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 Data.Functor.Identity import :: Identity
 from Control.Monad.State import :: State, :: StateT
 from Control.Monad.RWST import :: RWST, :: RWS
 from Data.Either import :: Either
-import mTask
+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
 
 :: MTaskMSGRecv
        = MTTaskAck Int
@@ -26,6 +30,8 @@ import mTask
        | OnInterval Int
        | OnInterrupt Int
 
        | OnInterval Int
        | OnInterrupt Int
 
+:: BCValue = E.e: BCValue e & mTaskType e
+
 instance toString MTaskInterval
 instance toString MTaskMSGRecv
 instance toString MTaskMSGSend
 instance toString MTaskInterval
 instance toString MTaskMSGRecv
 instance toString MTaskMSGSend
@@ -35,8 +41,8 @@ decode :: String -> MTaskMSGRecv
 :: BC
        = BCNop
        | BCLab Int
 :: BC
        = BCNop
        | BCLab Int
-//     | E.e: BCPush e & toByteCode e
-       | BCPush String
+       | BCPush BCValue
+//     | BCPush String
        | BCPop
        //SDS functions
        | BCSdsStore Int
        | BCPop
        //SDS functions
        | BCSdsStore Int
@@ -78,7 +84,20 @@ decode :: String -> MTaskMSGRecv
        | BCDigitalWrite Pin
        | BCTest AnalogPin
 
        | BCDigitalWrite Pin
        | BCTest AnalogPin
 
-derive class gCons BC
+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 ())
 
 
 :: ByteCode a p = BC (RWS () [BC] BCState ())
 
@@ -98,9 +117,9 @@ instance zero BCState
 
 class toByteCode a :: a -> String
 class fromByteCode a :: String -> a
 
 class toByteCode a :: a -> String
 class fromByteCode a :: String -> a
-class mTaskType a | toByteCode, fromByteCode, TC a
+class mTaskType a | toByteCode, fromByteCode, iTask, TC a
 
 
-instance toByteCode Int, Bool, Char, Long, String, Button, UserLED
+instance toByteCode Int, Bool, Char, Long, String, Button, UserLED, BCValue
 instance fromByteCode Int, Bool, Char, Long, String, Button, UserLED
 instance toByteCode MTaskInterval
 instance fromByteCode MTaskInterval
 instance fromByteCode Int, Bool, Char, Long, String, Button, UserLED
 instance toByteCode MTaskInterval
 instance fromByteCode MTaskInterval