+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
+ ,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