move fail

This commit is contained in:
AF 2023-05-20 14:38:49 +00:00
parent 02ac841b97
commit f1a17032d2
3 changed files with 20 additions and 4 deletions

View File

@ -10,3 +10,4 @@
- [Lifetimes](./ch04/s02-lifetimes.md)
- [Stackless](./ch04/s03-stackless.md)
- [Covariance](./ch04/s04-covariance.md)
- [Fail Semantics](./ch04/s05-fail.md)

View File

@ -1,19 +1,18 @@
# Concerns (questions) with the current implementaion
## There exist alternative `Functor` implementations
See the [relevant subchapter](./s01-alternatives.md)
## It might be better to have a per-lifetime trait for `Functor`s
See the [relevant subchapter](./s02-lifetimes.md)
## `Stackless` is kind of bad
See the [relevant subchapter](./s03-stackless.md)
## `WeakFunctor::F<'a, A>` is not (yet) covariant over the lifetime `'a`
See the [relevant subchapter](./s04-covariance.md)
## `Fail`/`FailMonad`/etc. have unclear semantics
See the [relevant subchapter](./s05-fail.md)
## Can `WeakFunctor` be an associated type of a `Functor` instead of its supertype?

16
src/ch04/s05-fail.md Normal file
View File

@ -0,0 +1,16 @@
# Fail Semantics
## Lack of proper support for injecting errors into classes that are already `Fail`
* Classes have only one implementation of `Fail` per error type.
* Proposed solutions:
* Have `Fail` as a separate trait with the error and the class as associated types.
* `OverloadClass` to mix-in additional `Fail`.
## Lack of support for strict ordering of errors
* Current (possible) implementations of having one error or another either allow short-circuiting
on only one of them, or give them both the same priority.
**Right now this model is considered the main one**,
i.e. this restriction may get stabilised and standardised at some point.
* More complex behaviours are expected to require a more complex execution model, with states
taking messages from other states and optionally dropping their own execution, if their
result\['s error\] is guaranteed to be "less severe" than the error it receives.