>>? \device->appendTask Embedded (mkTask n i device) stl
>-| chooseTask dev1 dev2 stl
where
- mkTask n i device stl
- # dev = if (device == "node") dev2 dev1
- = ((snd (tasks !! i) $ dev)
- >>* [OnAction ActionClose $ always $ return ()]) <<@ Title n/*\label{lst:example:ct2}*/
+ mkTask n i device stl = ((snd (tasks !! i) $ dev)
+ >>* [OnAction ActionClose $ always $ return ()]) <<@ Title n/*\label{lst:example:ct2}*/
+ where dev = if (device == "node") dev2 dev1
tasks :: [(String, MTDevice -> Task ())]/*\label{lst:example:tasks1}*/
tasks =
[ ("temp", \dev->
- liftmTask (
- DHT (DHT_DHT (DigitalPin D6) DHT22) \dht->
- {main=temperature dht}
+ liftmTask (DHT (DHT_DHT (DigitalPin D6) DHT22) \dht->
+ {main=temperature dht}
) dev
>&> \t->viewSharedInformation
- [ViewAs \i->toString (fromMaybe 0.0 i) +++ "C"] t
+ [ViewAs \i->toString (fromMaybe 0.0 i) +++ "C"] t
<<@ Hint "Current Temperature" @! ())
, ("lightswitch", \dev-> /*\label{lst:example:ls1}*/
withShared False \sh->
- liftmTask (
- declarePin D13 PMOutput \d13->
- liftsds \ls=sh
- In fun \f=(\st->
- getSds ls
- >>*. [IfValue ((!=.)st) (\v->writeD d13 v)]
- >>|. f (Not st))
- In {main=f true}
- ) dev
+ liftmTask (lightswitch sh) dev
-|| updateSharedInformation [] sh <<@ Hint "Switch")/*\label{lst:example:ls2}*/
- , ("factorial", \dev->
- updateInformation [] 5 <<@ Hint "Factorial of what?"
+ , ("remote computation", \dev->
+ updateInformation [] 5 <<@ Hint "Factorial of what?"
>>? \i->liftmTask (factorial i) dev
>>- \r->viewInformation [] r <<@ Hint "Result" @! ())
]
-factorial i = {main=rtrn (lit i)}
-blink d = {main=writeD (lit d) (lit True)}
-lightswitch sh = {main=rtrn (lit ())}
+factorial :: Int -> Main (MTask v Int) | mtask v
+factorial i =
+ fun \fac=(\i->If (i ==. lit 0) (lit 1) (i *. fac (i -. lit 1)))
+ In {main=rtrn (fac (lit i))}
+blink :: Int -> Main (MTask v ()) | mtask v
+blink d =
+ declarePin D13 PMOutput \d13->
+ fun \bl=(\st->
+ writeD d13 st
+ >>|. delay (lit d)
+ >>|. bl (Not st))
+ In {main=bl true}
+lightswitch :: (Shared sds Bool) -> Main (MTask v ()) | lowerSds, mtask v & RWShared sds & TC (sds () Bool Bool)
+lightswitch sh =
+ declarePin D13 PMOutput \d13->
+ lowerSds \ls=sh
+ In fun \f=(\st->
+ getSds ls
+ >>*. [IfValue ((!=.)st) (\v->writeD d13 v)]
+ >>|. f (Not st))
+ In {main=f true}