Использование классов типов с несколькими типами параметров - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь использовать symulacrum @typeclass, чтобы не писать шаблон Ops / Syntax.У меня есть черта, параметризованная с помощью эффекта, и тип:

@typeclass trait Close[F[_], T]{
    def close(t: T): F[Unit]
}

с намерением использовать его следующим образом:

trait Stream[F[_], Pipe]{
    def open(): F[Pipe]
    def drain(): F[Unit]
}
object App{
    def runApp[F[_], Pipe: Close[F, ?]](implicit stream: Stream[F, Pipe]) = {
        for{
            pipe <- stream.open()
            _ <- stream.drain(pipe)
            _ <- pipe.close()
        } yield ()
    }
}

Причина, по которой я решил убрать Close[F[_], T], заключалась в том, чтонекоторые Pipe s в моем приложении неотъемлемо неразрешимы, поэтому было бы странно помещать метод close для всех Pipe s

Это ошибка, которую я получаю:

Error:(32, 4) @typeclass may only be applied to types that take a single type parameter
  @typeclass trait Close[F[_], T]

ВОПРОС: В случае, если trait имеет несколько параметров типа (например, Close[F[_], T]), нужно ли мне писать все шаблоны Ops / Syntax самостоятельно, а Symulacrum @typeclass не можетздесь помощь?

1 Ответ

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

По своему усмотрению.

https://github.com/mpilquist/simulacrum#known-limitations

Известные ограничения

  • Только те классы типов, которые абстрагируются над правильнымТип или конструктор унарного типа в настоящее время поддерживаются.
...