Вопросы по теме 'higher-kinded-types'

Для чего полезен `class A [_]`?
Типы символов class A[_] или def a[_](x: Any) имеют параметр типа, на который нельзя ссылаться в теле, поэтому я не понимаю, для чего он полезен и почему он компилируется. Если попытаться сослаться на этот параметр типа, выдается ошибка:...
2125 просмотров
schedule 22.09.2021

Можно ли выразить общий случай монады в Java 6?
Можно ли выразить общий случай монады в Java 6? Обратите внимание на слова «общий случай», возможно, что общий случай монады не выразим, хотя можно выразить многие частные случаи монады (т.е. многие конкретные монады). Проблема здесь (отсутствие)...
560 просмотров

Типы высшего порядка в Scala
Я читаю книгу «Функциональное программирование в Scala», а в главе «Моноиды» говорится об интерфейсе Monoid, который выглядит следующим образом: trait Monoid[A] { def op(a1: A, a2: A): A def zero: A } Позже они определяют конкретные...
1355 просмотров
schedule 18.10.2021

Scala: являются ли операторы типов с ограничениями обобщенного типа?
У меня есть следующая формулировка натуральных чисел Пеано на уровне типа: gist с типом натурального числа, имеющим следующий интерфейс: sealed trait NaturalNumber { type MatchZero[T <: Up, F[_ <: NaturalNumber] <: Up, Up] <:...
65 просмотров

Почему std :: mem :: drop не совпадает с закрытием | _ | () в границах признаков с более высоким рангом?
Документировано, что реализация std::mem::drop выглядит следующим образом: pub fn drop<T>(_x: T) { } Таким образом, я ожидал закрытия |_| () (в просторечии известного как закрытие туалета ) быть потенциальной заменой 1: 1 для...
526 просмотров

Как определить экзистенциальный тип более высокого типа в Scala
Я пытался определить тип, который принимает экзистенциальный тип более высокого типа в Scala. К сожалению, Scalac этого не позволяет. Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45). Type in expressions to...
512 просмотров

Общий тип контейнера (более высокий вид) для карты в scala
Я пытаюсь определить класс case, параметризованный типом контейнера (более высокий вид). Этот тип контейнера может быть любым, если для него определен метод карты. Я хотел бы добиться этого результата, предложенного следующим кодом: import...
167 просмотров
schedule 21.05.2022

Есть ли внутренняя причина, объясняющая, почему в Rust нет типов более высокого порядка?
В Rust нет типов более высокого порядка. Например, функтор (и, следовательно, монада) не может быть написан на Rust. Я хотел бы знать, есть ли глубокая причина, объясняющая это и почему. Например, причина, которую я могу понять, может заключаться...
2931 просмотров

Как использовать один и тот же селектор записей двумя способами внутри функции? Линзы?
У меня есть некоторые данные, которые имеют разные представления в зависимости от параметра типа, а-ля Sandy Maguire's Higher Kinded Data . Вот два примера: wholeMyData :: MyData Z wholeMyData = MyData 1 'w' deltaMyData :: MyData Delta...
56 просмотров

Отображение ограниченного экзистенциально квалифицированного типа более высокого порядка
Надеюсь, я правильно понял терминологию. Я хочу сделать следующее: data Hide a = ∀ b. (A.ToJSON (a b), A.ToJSON b) ⇒ Hide (a b) mapHide ∷ (∀ c. (A.ToJSON (b c), A.ToJSON c) ⇒ a c → b c) → Hide a → Hide b mapHide f (Hide a) = (Hide $ f a)...
51 просмотров

Создайте экземпляр более высокого порядка для списка типа, где экземпляр для типа существует
Я не уверен, что это возможно. У меня есть что-то вроде следующего класса: data Bar a = Bar1 a | Bar2 class Foo f where foo :: f a -> Either [String] a instance Foo Bar where foo (Bar1 x) = Right x foo Bar2 = Left ["is Bar2"]...
65 просмотров
schedule 10.08.2022

Типы высшего порядка как переменные типа в Haskell
У меня есть класс: import Linear class Coordinate c where rotate :: Num a => Quaternion a -> c a -> c a translate :: Num a => V3 a -> c a -> c a , для которого я определил экземпляры instance Coordinate V3...
121 просмотров

Автоматически генерировать функцию сопоставления для данных с параметром более высокого типа
Рассмотрим тип данных data Foo f = Foo {fooInt :: f Int, fooBool :: f Bool} Мне нужна функция mapFoo :: (forall a. f a -> g a) -> Foo f -> Foo g . Мои варианты: Я мог бы написать это вручную. Это слегка раздражает, но...
101 просмотров

Функции не просто имеют типы: они ЯВЛЯЮТСЯ типами. И Виды. И Сорта. Помогите восстановить разбитый мозг
Я выполнял свою обычную процедуру «Прочитать главу LYAH перед сном», чувствуя, что мой мозг расширяется с каждым примером кода. В этот момент я был убеждён, что понял основные достоинства Haskell, и теперь мне нужно было просто разобраться со...
2214 просмотров

Расширить пользовательский тип более высокого типа
У меня есть пользовательский псевдоним для более высокого типа в scala: type FutureOfLastError = Future[LastError] У меня также есть значение этого типа: val myFuture: FutureOfLastError = ... Чтобы написать читаемый код, я хотел бы...
116 просмотров

Вывод типа Scala как для универсального типа, так и для его параметра типа - почему это не работает?
Если бы я назвал самую неприятную вещь в scala, то это было бы для следующего кода: trait G[+T] class H[+T] extends G[T] def f[A<:G[X], X<:Int](g :A) val g :H[Int] f(g) компилятор определяет типы последнего обращения к f [H [Int],...
546 просмотров

Устранение неоднозначности типа более высокого родства по сравнению с типом более высокого порядка
В предыдущем вопросе я спросил Почему интерфейс Monad не может быть объявленным на Java? . Там я получил комментарий от Брайана Гетца, в котором говорилось, что мне следовало называть «типы более высокого порядка» «более родственными типами»....
435 просмотров

Доброе понижение в должности (в отличие от доброго продвижения по службе)
Расширение DataKinds продвигает "значения " (т.е. конструкторы) в типы. Например, True и False становятся разными типами вида Bool . Я хотел бы сделать обратное, то есть понизить типы до значений. Функция с такой сигнатурой подойдет:...
295 просмотров
schedule 28.11.2022

Конструктор более высокого типа с верхними границами типа не работает, если граница является членом абстрактного типа
Я хочу определить трейт, который параметризуется верхней границей R и конструктором более высокого родственного типа F[_] , который принимает только аргументы, являющиеся подтипами R . Я хочу, чтобы этот трейт реализовал полиморфный apply ,...
279 просмотров

Может ли Rust перебирать все типы в модуле?
У меня есть подобная черта для описания структуры типа, если я знаю тип во время компиляции, конечно, я могу проверить все его ассоциированные константы, ассоциированные типы и статические функции-члены . Но дело в том, что в модуле определены сотни...
377 просмотров