0

我一直在玩 scalaz,但我被困在一个看似微不足道的问题上。我在玩 Reader 和 Kliesli monad,发现自己遇到了这样的事情:

val gr = Reader { (_: Int) + 1 }
val a = gr(1)

尽职尽责的回应:

a: scalaz.Id.Id[Int] = 2

我现在要做的是从 Identity monad 中解开 Int ,因为我应该使用 ?? 运算符,具有此签名:

final def ??(d: => A)(implicit ev: Null <:< A): A

我应该传递的第一个参数是一个默认值,一个名为 Int 的调用(正如 Brian McCutchon 所指出的):

scala> a??(1)
<console>:19: error: Cannot prove that Null <:<   scalaz.Id.Id[Int].
   a??(1)
    ^

在继续前进之前,我想了解我在这里缺少什么。感谢 EDITED 解决了我对没有参数功能的按名称调用的困惑。耻辱。

4

1 回答 1

0

a已经是Int; 见定义

编辑:没有方法可以解包,因为没有什么可以解包;REPL 打印的类型a只是另一种说法Int

于 2019-02-20T03:19:03.230 回答