startupDevices = upd (map reset) deviceStore
where reset d = {d & deviceTask=Nothing, deviceTasks=[], deviceError=Nothing}
+withDevice :: (MTaskDevice -> Task a) String -> Task a | iTask a
+withDevice f s = get deviceStore
+ >>= \ds->case 'DL'.find (\d->d.deviceName == s) ds of
+ Nothing = throw "Device not available"
+ Just d = f d
+
makeDevice :: String MTaskResource -> Task MTaskDevice
makeDevice name res = get randomInt @ \rand->{MTaskDevice
|deviceChannels=name +++ toString rand
ackFirst [t:ts] = if (t.ident == -1)
[{t & ident=i}:ts] [t:ackFirst ts]
-getDevice :: String -> Task MTaskDevice
-getDevice n = get deviceStore @ fromJust o 'DL'.find (\s->s.deviceName == n)
-
deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
deviceTaskDelete dev task = sendMessages [MTTaskDel task.ident] dev @! ()