From f6e04d75bab4a8dec916cc98a6dc18d26616888e Mon Sep 17 00:00:00 2001 From: timofey Date: Mon, 25 Sep 2023 00:40:37 +0000 Subject: [PATCH] stackless is now covariant --- src/ch04/s00-concerns.md | 6 ++++++ src/ch04/s01-alternatives.md | 1 + src/ch04/s02-lifetimes.md | 1 + src/ch04/s03-stackless.md | 2 +- src/ch04/s04-covariance.md | 6 +++--- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ch04/s00-concerns.md b/src/ch04/s00-concerns.md index 2c3c367..84d5e04 100644 --- a/src/ch04/s00-concerns.md +++ b/src/ch04/s00-concerns.md @@ -1,21 +1,27 @@ # 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~~ done + See the [relevant subchapter](./s02-lifetimes.md) ## `Stackless` is kind of bad + See the [relevant subchapter](./s03-stackless.md) ## `WeakFunctor<'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) ## Is `FutureInstance` actually feasible? + Todo: measure `futures::join` performance. ## Can `WeakFunctor` be an associated type of a `Functor` instead of its supertype? diff --git a/src/ch04/s01-alternatives.md b/src/ch04/s01-alternatives.md index 1b7ca91..3dae70e 100644 --- a/src/ch04/s01-alternatives.md +++ b/src/ch04/s01-alternatives.md @@ -44,6 +44,7 @@ fn fmap<'a, T: Functor<'a>, A: 'a + Clone, B: 'a + Clone>( ## `Clone`-`FnMut` category functors We view use of `FnMut` for category's morphisms as somewhat controversial[^e]. + * Use of direct/indirect mutable references is, arguably, counter-functional[^e]. * `Clone+FnMut` is, generally, nonsensical[^e]. * Due to that, morphisms category isn't a subcategory, so can't be wrapped. diff --git a/src/ch04/s02-lifetimes.md b/src/ch04/s02-lifetimes.md index 2253430..52a2fcd 100644 --- a/src/ch04/s02-lifetimes.md +++ b/src/ch04/s02-lifetimes.md @@ -1,6 +1,7 @@ # Making lifetimes a parameter of a trait instead of that of the GAT Current: + ```rust pub trait WeakFunctorAny { type F<'a, A: 'a>: 'a diff --git a/src/ch04/s03-stackless.md b/src/ch04/s03-stackless.md index ee7c427..18578a2 100644 --- a/src/ch04/s03-stackless.md +++ b/src/ch04/s03-stackless.md @@ -1,4 +1,4 @@ -# `Stackless<'a>` isn't covariant +# ~~`Stackless<'a>` isn't covariant~~ Fixed Current hypothesis is that this comes from `EvalTree<'a>` being invariant over `'a` due to `FnOnce` being invariant over its output, diff --git a/src/ch04/s04-covariance.md b/src/ch04/s04-covariance.md index 46b62cc..4415a18 100644 --- a/src/ch04/s04-covariance.md +++ b/src/ch04/s04-covariance.md @@ -1,5 +1,5 @@ -**`CovariantFunctor` was deleted.** +# **`CovariantFunctor` was deleted** -## Specific case: `Stackless<'a>` isn't covariant +## ~~Specific case: `Stackless<'a>` isn't covariant~~ -See the [relevant subchapter](s03-stackless.md) +~~See the [relevant subchapter](s03-stackless.md)~~