Вопросы по теме 'type-level-computation'

Могу ли я статически отклонять различные экземпляры экзистенциального типа?
Первая попытка Сложно сделать этот вопрос содержательным, но для минимального примера предположим, что у меня есть такой тип: {-# LANGUAGE GADTs #-} data Val where Val :: Eq a => a -> Val Этот тип позволяет мне с радостью составить...
311 просмотров

Экземпляр семейства типов Haskell с ограничениями типа
Я пытаюсь представить выражения с помощью семейств типов, но, похоже, не могу понять, как написать ограничения, которые мне нужны, и я начинаю чувствовать, что это просто невозможно. Вот мой код: class Evaluable c where type Return c :: *...
886 просмотров

Почему для вычислений на уровне типов требуется техника Aux?
Я почти уверен, что мне здесь чего-то не хватает, так как я новичок в Shapeless и учусь, но когда на самом деле требуется техника Aux ? Я вижу, что он используется, чтобы раскрыть type оператор, подняв его до сигнатуры другого «сопутствующего»...
1511 просмотров

Как получить значения уровня типа '[String] в Haskell?
Я могу получить значение уровня типа String следующим образом: > :set -XDataKinds > import Data.Proxy > import GHC.TypeLits > symbolVal (Proxy :: Proxy "test") "test" Как мне получить значения '[String] , например Proxy ::...
984 просмотров
schedule 07.10.2021

Как мне проверить бесформенность, если тип является членом HList?
Я выполняю последовательность шагов предварительной обработки для строк, и я думал об использовании HList s для повышения безопасности моих шагов. Некоторые этапы обработки должны выполняться после других, поэтому я подумал о кодировании их в...
233 просмотров
schedule 01.11.2021

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

Поиск неявного внутри вызова reify (макрос scala)
Мне нужно найти неявное значение в заданной позиции. Я сохранил позицию из предыдущего вызова макроса в классе, например: class Delayed[+Kind[_[_]]](val sourceFilePath: String, val callSitePoint: Int) { def find[F[_]]: Kind[F] = macro...
148 просмотров

В GHC.TypeLits для чего хорош someNatVal (чего мы не можем сделать с natVal)?
Я пытаюсь понять GHC.TypeLits и конкретно someNatVal . Я понимаю, как это используется в этом блоге опубликовать здесь , но, как уже упоминалось, тот же пример можно было бы реализовать с использованием natVal , например: isLength ::...
676 просмотров

Числа Пеано на уровне типов и неразрешимые экземпляры
Следуя этому руководству , у меня есть следующий код: {-# LANGUAGE DataKinds, TypeFamilies #-} data Nat = Z | S Nat type family Plus (n :: Nat) (m :: Nat) :: Nat type instance Plus Z m = m type instance Plus (S n) m = S (Plus n m)...
131 просмотров
schedule 28.03.2022

Подпись числового типа
Можно ли создать тип с числовым аргументом? то есть, если я хочу создать тип целых чисел с фиксированной разрядностью: newtype FixedWidth w = FixedWidth Integer addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (w+1)...
158 просмотров

Может ли система типов Haskell обеспечить правильный порядок этапов конвейера данных?
Я создаю множество конвейеров обработки данных, используя данные масс-спектрометрии, где данные с прибора очищаются, преобразовываются, масштабируются, проверяются и, наконец, анализируются. Я склонен использовать для этого определение рекурсивного...
220 просмотров

Agda - разница между аргументами типа слева и справа от двоеточия
Следующее определение компилируется и ведет себя хорошо: data Eq {lvl} {A : Set lvl} (x : A) : A → Set where refl : Eq x x Однако этот не компилируется: data Eq {lvl} {A : Set lvl} (x : A) (y : A) : Set where refl : Eq x x так как...
134 просмотров

Последовательность над разнородным списком в Haskell
Рассмотрим следующее определение HList : infixr 5 :> data HList (types :: [*]) where HNil :: HList '[] (:>) :: a -> HList l -> HList (a:l) И семейство типов Map для сопоставления списков уровней типов: type family Map...
212 просмотров

Haskell не может вывести равенства типов (или уровня типа), несмотря на явную аннотацию?
Я пытался реализовать дерево Брауна с Haskell, определенное следующим образом: {-# LANGUAGE GADTs #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeFamilies...
147 просмотров
schedule 05.07.2022

Общее преобразование / сворачивание / отображение кортежа / hlist, содержащего некоторый F [_]
Недавно я спросил Сопоставить и уменьшить / свернуть HList of scalaz.Validation и получил отличный ответ о том, как преобразовать фиксированный размер кортеж из Va[T] (который является псевдонимом для scalaz.Validation[String, T] ) в...
531 просмотров

Набор уровня типа для алгебраического типа данных
Это частично дублирует этот вопрос: Получение подклассов запечатанного признака , но ответ предлагает отражение во время выполнения, которое мне не подходит, и я хотел бы знать, возможно ли это во время компиляции, возможно, с использованием...
271 просмотров

Есть ли способ неявно получить экземпляр объекта
Мы хотим создать кодировщик для произвольного Enumerations с бескаркасным , который в основном создает двунаправленное сопоставление из произвольное число от Enumeration до Byte . В настоящее время наше далеко не оптимальное решение состоит в...
403 просмотров

Как вызвать ошибку соответствия шаблону семейства типов в Haskell?
Может ли Haskell указать ошибку соответствия семейства типов? Например, используя закрытое семейство типов: type family Testf a where Testf Char = IO () Testf String = IO () Тип Testf Int — это просто Testf Int . Компилятор не...
314 просмотров
schedule 13.08.2022

Как правильно использовать неоднозначные имплициты для отрицания типа в Scala
В конечном итоге я хочу предоставить одну реализацию класса типа для определенного типа T и другую реализацию для всех других типов, которые не являются T . Я думал (возможно, неправильно), что самый простой способ сделать это — попробовать...
239 просмотров

Среда уровня типа в Haskell
Я пытаюсь использовать некоторые расширения Haskell для реализации простого DSL. Я бы хотел, чтобы у переменных был контекст уровня типа. Я знаю, что подобные вещи обычно встречаются в таких языках, как агда или идрис. Но я хотел бы знать, можно ли...
361 просмотров