Развертывание значения монады 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
,