解开Identity Monad的价值

时间:2018-12-09 22:51:57

标签: scala scalaz scalaz7

我一直在和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)
    ^

在继续前进之前,我想了解我在这里所缺少的东西。 谢谢 编辑以解决我对无参数调用按名称的困惑。丢脸。

1 个答案:

答案 0 :(得分:0)

a已经是Int;参见the definition

edit:没有解包的方法,因为没有要解包的内容。 REPL为a打印的类型只是Int的另一种说法。