def map[A, B](fa: F[A])(f: A => B): F[B]
}
final class FunctorOps[F[_], A](private val fa: F[A]) extends AnyVal {
def map[B](f: A => B)(implicit F: Functor[F]): F[B] = F.map(fa)(f)
}
}
package object mypkg {
/**
* Pun implicit conversion name to be the same as Functor –
* now importing Functor ALWAYS brings its syntax in scope
*/
implicit def Functor[F[_], A](fa: F[A]): FunctorOps[F, A] = new FunctorOps(fa)
}
package object user {
import mypkg.Functor
def increment[F[_]: Functor](l: F[Int]): F[Int] = {
l.map(_ + 1)
}
}
Импорт syntax.blah._? Не, не слышал
А это в спеке есть?
Обсуждают сегодня