Развертывание значения монады Identity

Я немного играл со скалазом и застрял в кажущейся тривиальной проблеме. Я играл с монадой Reader и Kliesli и обнаружил что-то вроде этого:

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

Это покорно отвечает:

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

То, что я пытаюсь сделать сейчас, - это развернуть Int из монады Identity, для этого я должен использовать?? оператор, с этой подписью:

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

Первый параметр, который я должен передать - это значение по умолчанию, вызов по имени Int (как указал Брайан МакКатчон):

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

Я хотел бы понять, чего мне здесь не хватает, прежде чем я продолжу двигаться. Спасибо ИЗМЕНЕНО, чтобы исправить мою путаницу в отношении вызова по имени без функции параметров. Позор.

1 ответ

a уже Int; см. определение.

редактировать: нет методов, чтобы развернуть, потому что нет ничего, чтобы развернуть; тип, для которого печатается REPL a это просто еще один способ сказать Int,

Другие вопросы по тегам