+connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task ()
+connectDevice pf d = let ch = channels d in appendTopLevelTask 'DM'.newMap True
+ (pf d ch -||- catchAll (getSynFun d.deviceData ch) errorHandle)
+ >>= \tid->withDevices d (\d->{d&deviceTask=Just tid,deviceError=Nothing}) @! ()
+ where
+ errorHandle e = withDevices d (\d->{d&deviceTask=Nothing,deviceError=Just e})
+