gpt4 book ai didi

Scalaz 7 - 为什么使用类型别名会导致 Reader 的类型类解析不明确

转载 作者:行者123 更新时间:2023-12-04 18:15:02 25 4
gpt4 key购买 nike

测试代码:

import scalaz.{Reader, Applicative}

class ReaderInstanceTest {

type IntReader[A] = Reader[Int, A]
val a = Applicative[({type l[A] = Reader[Int, A]})#l] // fine

val b = Applicative[IntReader]
// ^ ambigous implicit values
// both method kleisliMonadReader ..
// and method kleisliIdMonadReader ..
}

这与 Scala 的 higher-order unification for type constructor inference 有关吗?票?如果是这样(即使不是),你能描述一下在 a 和 b 情况下会发生什么吗?

您是否有关于何时使用类型 lambda 以及何时使用类型别名的指导方针,以便从长远来看一切正常而不会出现意外错误?

最佳答案

是的,这与 SI-2712 有关。
kleisliIdMonadReader仅用于指导类型推断;它只是转发到kleisliMonadReader .通过提供类型别名 IntReader , scalac 不需要此帮助,并且可以推断 kleisliMonadReader 的类型参数直接地。这会导致歧义。

我刚刚提出了一个补救措施:我们可以通过在子类中定义一个来确定这些隐含的相对优先级。

https://github.com/scalaz/scalaz/commit/6f9ae5f

关于Scalaz 7 - 为什么使用类型别名会导致 Reader 的类型类解析不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11913128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com