@FriedBrice Нет проблем, если вы получили ответ, вот что важно :)

я есть классFoo с двумя параметрами, и я пытаюсь написать экземпляр Functor для Foo с фиксированным первым параметром следующим образом:

object Scratchpad {

  trait Functor[F[_]] {
    def fmap[A, B](f: A => B): F[A] => F[B]
  }

  case class Foo[X, Y](value: Y)

  implicit def fooInstances[X]: Functor[Foo[X, _]] =
    new Functor[Foo[X, _]] {
      def fmap[A, B](f: A => B): Foo[X, A] => Foo[X, B] =
        foo => Foo[X, B](f(foo.value))
    }
}

Но приведенный выше код не компилируется, генерируя следующую ошибку:

Error:(9, 41) Scratchpad.Foo[X, _] takes no type parameters, expected: one
  implicit def fooInstances[X]: Functor[Foo[X, _]] =

Я знаю, что Скалаз делает что-то подобное со своими\/ типа, но проверка их исходного кода выявляет странный?, который не компилируется для меня:

implicit def DisjunctionInstances1[L]: Traverse[L \/ ?] with Monad[L \/ ?] with BindRec[L \/ ?] with Cozip[L \/ ?] with Plus[L \/ ?] with Optional[L \/ ?] with MonadError[L \/ ?, L] =

Как работает Скалаз? работать, и как я могу написать экземпляр Functor дляFoo?

Ответы на вопрос(2)

Ваш ответ на вопрос