Nicolas Trangez
Nicolas Trangez
The current implementation of `CQueue` is quite complicated. Reworking this, simplifying it, potentially making it fully STM-only, could be useful. See: #7
Some experimentation to have something alike `gen_server` would be useful. I particularly like Drama's usage of a GADT to specify the API (call arguments and return type) of such service,...
The `ProcessTable` newtype (currently `Map ProcessId ProcessContext`) and associated actions would encapsulate all operations (within STM) which affect two or more processes (e.g., `link`, `unlink`, `monitor`,...). By properly encapsulating this,...
For most operations (e.g., `link`, `monitor` etc.) it's likely fine to go through the `nodeContextProcesses` `Map` to look up some target process and make modifications. However, when `send`ing a message,...
Currently, several functions in `Troupe.Process` are not really 'primitive' functions (e.g., all the `*WithOptions` functions). It'd make sense to split things up, so the core/primitives and their interactions are very...
Currently, `Process r a` is defined as `ReaderT (ProcessEnv r) IO a`. Indeed, we don't want any other monad but `IO` as the base monad for processes (theoretically anything implementing...
There are several useful things that may be built on top of the primitives, e.g.: - `withProcess :: MonadProcess r m => Process r a -> (ProcessId -> Process r...
`receiveOptionsNew` (or or similar) allows for "only new messages since the last call to receive" to be... received. This allows for optimization, e.g., when implementing `call` for `gen_server`: we know...
Currently, to create new `ProcessId`s and `MonitorRefId`s, a global `TVar` is used. This could be a cause for contention (to be profiled). If it is, this should be refactored into...
The current bounds, `~=0.5.10`, translate to `>= 0.5.10, == 0.5.*` according to the "Version specifiers" spec. Given `nbclient` is currently at version 0.10.0, loosening the bounds allows for `pytest-notebook` to...