Развертывание значения монады Identity - PullRequest
0 голосов
/ 10 декабря 2018

Я немного поигрался со скалазом и застрял в, казалось бы, тривиальной проблеме.Я играл с монадой 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 Ответ

0 голосов
/ 20 февраля 2019

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

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

...