Я пытаюсь портировать части библиотеки Haskell для типа данных унифицированной программировании на Scala. Вот проблема, я столкнулся:Scala: несколько параметров типа для неявного класса
Я определил черту, Generic
, с некоторым параметром контейнерного типа:
trait Generic[G[_]] {
// Some function declarations go here
}
Теперь у меня есть абстрактный класс, Collect
, с тремя параметрами типа, и объявление функции (это означает тип, чем может собрать все subvalues типа B
в контейнер типа F[_]
из некоторой структуры типа A
):
abstract class Collect[F[_],B,A] {
def collect_ : A => F[B]
}
В целях сделать его продлить Generic, первые два параметра типа F[_]
и B
приведены, и A
является кэрри (этот эффект моделируется с помощью типа лямбды):
class CollectC[F[_],B] extends Generic[({type C[A] = Collect[F,B,A]})#C] {
// Function definitions go here
}
Проблема заключается в том, что мне нужно определение последнего класса, чтобы быть неявной , потому что позже в моем коде мне нужно будет, чтобы иметь возможность написать такие функции, как
class GUnit[G[_]](implicit gg: Generic[G]) {
// Some definitions
}
Когда я просто предварять implicit
к определению класса, я получаю ошибку говоря implicit classes must accept exactly one primary constructor parameter
. Кто-нибудь сталкивался с подобной проблемой? Есть ли известный способ обойти это? В настоящее время я не вижу, как я мог бы реорганизовать свой код, сохраняя при этом ту же функциональность, поэтому любые советы приветствуются. Заранее спасибо!
Это было очень полезно, спасибо! – Rrr