如何隐式扩展定义

How will implicitly expand the definition

我有以下代码片段:

override def A: MonadError[F, GenderError] = implicitly  

我想知道,编译器将如何扩展定义。

我不确定,但我猜:

def implicitly[F[_]: MonadError[F, GenderError]](implicit e: MonadError[F, GenderError]): T = e 

谁能证明一下?

它比那个更通用:

def implicitly[A](implicit x: A) = x

所以它 return 是您要求当前范围的任何类型的隐式值,在本例中 MonadError[F, GenderError]

你自己猜

def implicitly[F[_]: MonadError[F, GenderError]](implicit e: MonadError[F, GenderError]): T = e 

不是特例,您应该删除上下文绑定并修复 return 类型:

def implicitly[F[_]](implicit e: MonadError[F, GenderError]): MonadError[F, GenderError] = e