Описание тега higher-kinded-types

2 ответа

Получение экземпляров для данных более высокого класса

Этот вопрос основан на шаблоне данных с более высоким родом, описанном в этом блоге "Разумно-Полиморфный". В следующем блоке кода я определяю семейство типов HKD и тип данных Personгде поля могут быть либо Maybe или же Identity, {-# LANGUAGE DeriveG…
02 апр '18 в 20:55
1 ответ

Неявные преобразования не работают с параметрами типа

У меня проблема с неявными преобразованиями, не работающими при определенных обстоятельствах (типы с более высоким родом). Для данной системы, типа выражения и двух конкретных подтипов выражения: trait Sys[S <: Sys[S]] object Expr { trait Var [S …
2 ответа

Привязать переменную типа к типу элемента коллекции

Как связать переменную полиморфного типа с параметром конструктора унарного типа в Scala? def f[CollectionOfE] = new Blah[...] { def g(a: E) = { ... } } ... val x = f[Set[Int]] // want E above to bind to Int В определении g я хочу иметь возможность …
28 ноя '17 в 22:02
1 ответ

Ограничение родственных типов для аргумента Function1 и типа результата

Даны некоторые типы с более высоким родом: trait Impl [S] trait Event[S, A] trait Key [A] Как я могу переписать следующее определение: def declare[A](fun: Impl[_] => Event[_, A]): Key[A] = ??? ограничить fun аргумент, чтобы быть на самом деле Imp…
15 янв '12 в 20:19
3 ответа

Можем ли мы определить тождественную функцию более высокого уровня в Scala?

В Scala мы можем определить функцию идентичности на уровне типов для типов с меньшим родом, например, type Id[A] = A Можем ли мы определить нечто подобное для типов с более высоким родом? То есть. мы можем заполнить пробелы, type HKId[A[...]] = ... …
1 ответ

Как вы можете написать универсальные методы улучшения Scala, которые связывают тип коллекции, а также тип элемента?

Если вы похожи на меня, вы иногда хотите написать улучшенные методы для коллекций или последовательностей Scala, но вы хотите связать тип коллекции, а также тип элемента, а не просто передать его в Seq[T].
2 ответа

Как написать параметр scalaz.IsEmpty для универсальных типов

Я пытаюсь написать общий метод, который оборачивает все, что имеет scalaz.IsEmpty экземпляр класса типов в Option, Должно вернуться None для пустых значений, и обернуть его в Some если он не пустой. Вот что я дошел до сих пор: import scalaz._ import…
1 ответ

Связанные ссылки в аннотациях типа Python

Скажем, у меня есть функция, которая принимает значение и произвольное количество функций, давайте вызовем функцию для chain_call. Без типов простая наивная реализация была бы: def chain_call(input_value, *args): for function in args: input_value = …
1 ответ

Отсутствует манифест для старшего типа

У меня проблемы со скалаком, так как я не могу найти манифест для внутреннего типа с более высоким родом, который я хочу использовать. Рассмотрим некоторый список типа type с конструктором: trait L[S, A] def emptyList[S, A: Manifest]: L[S, A] = ??? …
21 ноя '11 в 19:16
2 ответа

Полиморфизм высших порядков + типы значений

Я где-то читал, что полиморфизм высшего порядка не может быть использован / реализован в системах типов с типами значений (например,.NET). Это правильно и почему?
0 ответов

Добрый вывод с подтипом

Есть ли примеры систем логического вывода с подтипами? В системах типов, таких как Haskell, нет никакого полиморфизма на добром слое. Как правило, определение типа с помощью параметрического полиморфизма представляет собой сложную проблему, но поско…
1 ответ

Проблема компиляции с псевдонимом типа upperKinds

У меня есть такая черта, как trait T{ type F[_] def get[A](f: F[A]): A } Но я не могу это реализовать type Id[+A] = A // same as shapeless Id object O extends T{ type F[_] = Id[_] def get[A](f: F[A]): A = f // } // error: type mismatch; // found : f…
03 дек '18 в 16:16
1 ответ

Неоднозначные типы с PolyKinds

Следующие компиляции без PolyKinds: {-# LANGUAGE TypeFamilies, GADTs #-} type family Modulus zq type family Foo zq q data Bar :: (* -> *) where Bar :: (zq' ~ Foo zq (Modulus zq)) => Bar (zq -> zq') Все появления zq какой-то тип (вид *) пред…
04 июн '14 в 14:41
1 ответ

Scala: проблема с частично примененными конструкторами типов

Я определил следующий тип псевдонима: type PartiallyAppliedEither[A] = Either[String, A] Я вижу, что следующие компиляции: def checkTypeEquality1(implicit ev: PartiallyAppliedEither[_] =:= Either[String, _]) = 1 checkTypeEquality1 //compiles но это …
3 ответа

Шаблоны и виды высшего порядка в C++

Я пытаюсь написать функцию, которая принимает два контейнера одного и того же содержимого типа, например, два std::vector<int>с или std::list<int> и std::vector<int>, (Но не std::vector<int> и std::vector<double>!) Так …
30 июн '12 в 23:17
4 ответа

Частичное применение параметров типа

Я отчаянно пытаюсь решить следующее: trait Access[Res[_]] { def access[C]: Res[C] } trait CList[C1, A] extends Access[CList[_, A]] // ?! def test[C1, C2, A](c: CList[C1, A]): CList[C2, A] = c.access[C2] Скалак просто говорит: "error: illegal cyclic …
03 апр '11 в 04:59
0 ответов

Высший родственный тип не наблюдается

Я делаю что-то, что кажется довольно простым: я пытаюсь реализовать класс типов, определенный для коллекции, с двумя параметрами типа, используя тип с более высоким родом в качестве параметра типа для класса типов. Примечательной сложностью здесь яв…
01 сен '17 в 18:34
1 ответ

Haskell - указание вида в декларации данных

В этой декларации data Const a = Const Integer Хаскелл делает вывод, что Const является * -> *, Можно ли сделать Const вместо этого возьмите конструктор типа, так что (* -> *) -> *? В идеале это должно быть a -> *, но полиморфных видов н…
1 ответ

Высоко-родственный экзистенциальный тип

Я размышлял над проблемой дизайна в библиотеке, над которой я работаю, и понял, что использование экзистенциальных типов может позволить мне изменить свой дизайн таким образом, чтобы упростить многие части моей библиотеки. Тем не менее, я не могу за…
28 окт '15 в 11:47
1 ответ

Соответствие шаблону параметра с более высоким родом

У меня есть модель предметной области с ADT с 4-мя подслоями, например sealed trait Param case class A(...) extends Param case class B(...) extends Param case class C(...) extends Param case class D(...) extends Param И различные типы параметризован…
13 ноя '17 в 14:13