展开Identity monad的值

问题描述 投票:0回答:1

我一直在玩斯卡拉,我陷入了一个看似微不足道的问题。我正在玩阅读器和Kleisli 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解决了我对没有参数功能的call-by-name的困惑。耻辱。

scala scalaz scalaz7
1个回答
0
投票

a已经是Int;见the definition

编辑:没有解包方法,因为没有任何东西需要打开; REPL为a打印的类型只是说Int的另一种方式。

© www.soinside.com 2019 - 2024. All rights reserved.