module blink import mTask.Interpret import mTask.Interpret.Device.TCP import iTasks.Extensions.DateTime import StdEnv, iTasks Start w = doTasks interactiveBlink w interactiveBlink :: Task () interactiveBlink = enterDevice/*\label{lst:intro_enterDevice}*/ >>? \spec->withShared 500 \iInterval-> /*\label{lst:intro_withshared}*/ withDevice spec \dev-> /*\label{lst:intro_withdevice}*/ liftmTask (intBlink iInterval) dev/*\label{lst:intro_liftmtask}*/ -|| (Hint "Interval (ms)" @>> updateSharedInformation [] iInterval)/*\label{lst:intro_editor}*/ >>* [OnAction (Action "Stop") (always (return ()))] enterDevice :: Task TCPSettings enterDevice = enterInformation [] <<@ Hint "Enter connection info" intBlink :: (Shared sds Int) -> Main (MTask v Int) | mtask, lowerSds v & RWShared sds & TC sds () Int Int /* intBlink :: (Shared sds Int) -> Main (MTask v Int) | mtask v & ... */ intBlink iInterval = declarePin D2 PMOutput \ledPin-> /*\label{lst:intro:declarePin}*/ lowerSds \mInterval = iInterval/*\label{lst:intro:liftsds}*/ In fun \blink = (\st-> /*\label{lst:intro:blink_fro}*/ getSds mInterval >>=. \i->delay i >>|. writeD ledPin st >>|. blink (Not st))/*\label{lst:intro:blink_to}*/ In {main = blink true}/*\label{lst:intro:mtask_to}*/