X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=mTaskSimulation.dcl;h=b3870cfcd3bd5fa382a47b104acccfdbeae5c44c;hb=8246c6551faa818be7a58638dbbc2e521f21c454;hp=496bd521a3924074043a7ac74923c4676eef4e79;hpb=dd0896b855fc81e10b45b9407fead457a027f645;p=mTask.git diff --git a/mTaskSimulation.dcl b/mTaskSimulation.dcl index 496bd52..b3870cf 100644 --- a/mTaskSimulation.dcl +++ b/mTaskSimulation.dcl @@ -2,11 +2,18 @@ definition module mTaskSimulation import mTask -instance zero State +from Generics.gdynamic import :: Dyn, class dyn, generic toGenDynamic, generic fromGenDynamic +from GenPrint import class PrintOutput, :: PrintState +from Data.Maybe import :: Maybe +from iTasks import class iTask, generic gEditor, generic gDefault, generic gText, generic JSONEncode, generic JSONDecode, :: Task, :: Editor, :: JSONNode, :: TextFormat + +:: Display a = Display a + +derive class iTask Display eval :: (Main (Eval t p)) -> [String] | toString t -:: State = - { tasks :: [(Int, State->State)] +:: State` = + { tasks :: [(Int, State`->State`)] , store :: [Dyn] , dpins :: [(DigitalPin, Bool)] , apins :: [(AnalogPin, Int)] @@ -14,11 +21,11 @@ eval :: (Main (Eval t p)) -> [String] | toString t , millis:: Int } -//:: TaskSim :== (Int, State->State) -:: Eval t p = E ((ReadWrite t) State -> (t, State)) -toS2S :: (Eval t p) -> (State->State) +//:: TaskSim :== (Int, State`->State`) +:: Eval t p = E ((ReadWrite t) State` -> (t, State`)) +toS2S :: (Eval t p) -> (State`->State`) -unEval :: (Eval t p) -> ((ReadWrite t) State -> (t, State)) +unEval :: (Eval t p) -> ((ReadWrite t) State` -> (t, State`)) :: ReadWrite t = Rd | Wrt t | Updt (t->t) @@ -66,23 +73,21 @@ instance arg (Eval t p, Eval u q, Eval v r, Eval w s) | type t & type u & type v instance + String readPinA :: AnalogPin [(AnalogPin, Int)] -> Int -writePinA :: AnalogPin Int State -> State +writePinA :: AnalogPin Int State` -> State` class readPinD p :: p [(DigitalPin,Bool)] [(AnalogPin,Int)] -> Bool instance readPinD DigitalPin instance readPinD AnalogPin -class writePinD p :: p Bool State -> State +class writePinD p :: p Bool State` -> State` instance writePinD DigitalPin instance writePinD AnalogPin // ----- Interactive Simulation ----- // -derive class iTask DigitalPin, AnalogPin, Dyn, StateInterface, DisplayVar, Pin - simulate :: (Main (Eval a p)) -> Task () -toView :: State -> StateInterface -mergeView :: State StateInterface -> State +toView :: State` -> StateInterface +mergeView :: State` StateInterface -> State` :: StateInterface = { serialOut :: Display [String] , analogPins :: [(AnalogPin, Int)] @@ -102,12 +107,12 @@ fromDisplayVar :: DisplayVar Dyn -> Dyn | LCD16x2 String String | DisplayVar [String] -step` :: State -> State +step` :: State` -> State` class stringQuotes t | type t :: (Code t p) -> Code t p instance stringQuotes String instance stringQuotes t -derive toGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long //, Servo -derive fromGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long //, Servo +derive toGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long, UserLED //, Servo +derive fromGenDynamic (), MTask, DigitalPin, AnalogPin, Pin, [], Long, UserLED //, Servo instance == ()