+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 ()))]
+where 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 iInterval = declarePin D13 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}*/