我正在学习面向程序员的类别理论,其中一个挑战是实现一个Functor接口.
This个问题提供了以下解决方案:
pub trait Functor<A> {
type With<B>: Functor<B>;
fn map<B>(self, f: impl Fn(A) -> B) -> Self::With<B>;
}
然而,这将允许With
是实现函子的任何类型.我真正想要的是这样的:
pub trait Functor<A> {
fn map<B>(self, f: impl Fn(A) -> B) -> Self<B>;
}
但是Self
不接受类型参数.我该怎么办?