-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}