Описание тега kind-projector

Плагин компилятора Scala для упрощения написания лямбда-выражений типов и полиморфных лямбда-выражений
1 ответ

Что такое добрый проектор

Я копался в FP и во всем, что его окружает, и я нашел идею доброго проектора, написанную где-то, без подробностей и объяснений. Единственное, что я нашел, был этот проект github, и я начинаю думать, имел ли он в виду этот конкретный проект или какую…
4 ответа

Можно ли "карри" более высокопородных типов в Scala?

Предположим, у меня есть черта с двумя параметрами типа, например trait Qux[A, B] и другой признак с параметром типа с более высоким родом, например trait Turkle[C[_]] Я хотел бы иметь возможность заменить фиксированное значение для одного из параме…
1 ответ

Частично примененный тип лямбда в Scala с добрым проектором

Рассмотрим следующее определение типа: trait LiftF[F[_], G[_]] { def liftF[A](fa: F[A]): G[A] } При предоставлении требования для неявного этого типа в контексте контекста (используя добрый плагин проектора) мы должны написать это так: def func[A, G…
1 ответ

Почему опция [Try[_]] не соответствует F[_]?

Итак, что-то вроде этого: @ trait IntWrapper[F[_]] { def apply(i: Int): F[Int] } defined trait IntWrapper @ class OptWrapper extends IntWrapper[Option] { def apply(i: Int) = Option(i) } defined class OptWrapper Теперь я хочу сделать что-то вроде это…
1 ответ

Обобщенные ограничения в предложении параметра типа?

SLS определяет синтаксис предложения параметра типа как TypeParamClause ::= ‘[’ VariantTypeParam {‘,’ VariantTypeParam} ‘]’ FunTypeParamClause::= ‘[’ TypeParam {‘,’ TypeParam} ‘]’ VariantTypeParam ::= {Annotation} [‘+’ | ‘-’] TypeParam TypeParam ::=…
1 ответ

добрый проектор возвращает странные результаты

У меня есть такие типы:SomeTypeClass Тип с более высоким родством, который имеет один параметр типа вида * => * => * trait SomeTypeClass[P[_, _]] { def test[F[_], S, T, A, B](f: (A => F[B]) => S => F[T]) (pab: P[A, B]) (implicit ev: Strong[…
1 ответ

Что означает * в тестах?

В тестах кошек, * встречается как параметр типа, например, здесь: checkAll("Nested[Eval, List, *]", DeferTests[Nested[Eval, List, *]].defer[Int]) (См. https://github.com/typelevel/cats/blob/master/tests/src/test/scala/cats/tests/NestedSuite.scala) Я…
14 окт '19 в 16:51
1 ответ

Разница между * (звездочка) и _ (подчеркивание) в параметре типа

Здесь кто-то говорит, что звездочка - это подчеркивание из scala 3, но я видел такой код в scala 2.13: def make[F[_]: ContextShift: MonadError[*[_], Throwable]: Effect: Logging](): ... Имеет ли он такое же значение и просто указывает, что тип в * н…
1 ответ

Уточнение поведения кросс-версий в Scala

Интересно, в чем разница между ними: addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.11.3" cross CrossVersion.full) // if your project uses multiple Scala versions, use this for cross building addCompilerPlugin("org.typelevel" % "kind-pro…
19 фев '21 в 16:48
0 ответов

Как читать сложный тип [TwinMonad [p0 $$, p1 $$] F [Any, p0 $$, p1 $$]] в scala?

Кто-нибудь знает, что означает этот тип Scala? Идея подсказывает мне тип, но я не могу понять, что это значит. [TwinMonad[p0$$, p1$$] F[Any, p0$$, p1$$]] Что значит p0$$ иметь в виду? Почему выражение TwinMonad[p0$$, p1$$] отдельно от F[Any, p0$$, p…
29 сен '21 в 14:24
0 ответов

Полиморфный метод работает с лямбда-типом, но не с подстановочным знаком типа в Scala 3.

В Scala 3 я могу определить функтор для состояния, используя лямбда-тип: given stateFunctor[S]: Functor[[A] =>> State[S, A]] with override def map[A, B](a: State[S, A])(fx: A => B): State[S, B] = State(a.run.andThen { case (s, a) => (s, …
1 ответ

Объявить естественное преобразование для пакетной обработки с помощью kind-projector

У меня есть следующая черта: trait Test[F[_]]{ def foo: F[Int] } И я попытался применить к нему так называемое пакетное преобразование следующим образом: def withBatching[F[_]](t: Test[F], nat: F ~> F[List[*]]): Test[F[List[*]]] = ??? Проблема в …