/ / Scala Неявні генератори - scala, неявна конверсія, неявна, scalaz, scalaz7

Scala Неявні генератори - scala, implicit-conversion, implicit, scalaz, scalaz7

Якщо я маю неявну думку від A до B, як я можу отримати автоматичні підказки F[A] до F[B]?

Наприклад, якщо у мене є implicit toInt[A](l: List[A]) = l.size і тепер я хочу мати неявне з (List[A], Int) до (Int, Int) який повторно використовує toInt неявна. Це можливо навіть у Скалі?

Відповіді:

4 для відповіді № 1

Імпліцити можуть використовувати інші імпліцити для перетворення значень. Так дано ваше toInt:

implicit def toInt[A](l: List[A]): Int = l.size

Ми можемо визначити неявне перетворення для перетворення першого елемента 2-кортежа в Int, наприклад (List[Int], Int) до (Int, Int):

implicit def tupleConvert[A <% Int, C](x: (A, C)): (Int, C) = (x._1, x._2)

The A <% Int оголошує зв'язаний вигляд, вимагаючи від них імплікаційного перетворення A до Int бути доступним в області виклику.

Може здатися, що таке можливо:

implicit def tupleConvert2[A <% B, B, C](x: (A, C)): (B, C) = (x._1, x._2)

що дозволяє конвертувати будь-який 2-тип типу (A, C) до (B, C) отримано конверсію з A до B. Однак через те, як Scala вирішує параметри типу для імпліцитів, це не працює *.

* (Я думаю, це може бути помилка, вона дуже схожа на SI-2046, що є дублікатом SI-3340, який все ще відкритий)