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

Соответствие на уровне типа Nat в GHC 7.6
Мой вопрос, наверное, проще всего объяснить на примере: type family Take (n :: Nat) (xs :: [k]) :: [k] type instance Take 0 xs = '[] type instance Take (n+1) (x ': xs) = x ': Take n xs Однако второй экземпляр здесь отклоняется,...
826 просмотров

Возможны ли доказательства экземпляров семейства типов?
Во-первых, я начал с некоторых типичных натуральных чисел на уровне типов. {-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} data Nat = Z | S Nat type family Plus (n :: Nat) (m ::...
303 просмотров

Преобразование целых чисел в числа Пеано с использованием системы типов
Это продолжение вопроса, который я задал почти два года назад . Я все еще экспериментирую с системой типов, чтобы написать небольшую библиотеку линейной алгебры, в которой размеры векторов/матриц/тензоров кодируются с использованием системы типов (с...
756 просмотров

Как заставить Haskell проверять длину списков?
Мы можем определить функции f и g следующим образом: f :: [a] -> [a] -> [a] f = (++) g :: [a] -> [a] -> [a] g = zipWith (+) И f , и g принимают в качестве параметров два списка и возвращают новый список, но они разные: f...
1306 просмотров
schedule 07.07.2023

Программирование уровня типа Scala - представление иерархии
Я изучаю программирование на уровне типов в Scala, и мне интересно, можно ли представить дерево или иерархию с помощью программирования на уровне типов. Простым случаем будет многоуровневое дерево. A_ | B_ |C |D | E...
900 просмотров
schedule 07.11.2022

Преобразовать список уровня типа '[a, b, c,] в функцию a- ›b-› c- ›
У меня есть семейство данных, проиндексированное списком на уровне типов, где типы в списке соответствуют параметрам экземпляра данных. Я хочу написать функцию, которая будет иметь разную арность и параметры в зависимости от экземпляра данных, чтобы...
162 просмотров

Материализуйте значение для типа с одним обитателем
Благодаря ответу @MilesSabin я могу написать последовательность Фибоначчи уровня типа: sealed trait Digit case object Zero extends Digit case object One extends Digit sealed trait Dense { type N <: Dense } sealed trait DNil extends Dense {...
662 просмотров

Ограничения равенства для списков уровня типов
Я пытаюсь наложить ограничение на уровне типа, согласно которому список уровня типа должен иметь ту же длину, что и переносимый Nat уровня типа. Например, при использовании пакета Length from singletons [1]: data (n ~ Length ls) => NumList (n...
364 просмотров

Ключи Typesafe для карты
Учитывая следующий код: val m: Map[String, Int] = .. // fetch from somewhere val keys: List[String] = m.keys.toList val keysSubset: List[String] = ... // choose random keys Мы можем определить следующий метод: def sumValues(m: Map[String,...
268 просмотров
schedule 13.08.2023

Когда вычисления на уровне типов происходят с семействами типов?
Я пытаюсь составить интуитивное представление о том, когда (и сколько раз) вычисления на уровне типов с семействами типов «происходят» в Haskell. В качестве конкретного примера рассмотрим этот класс типов для индексации в n-арный продукт с...
190 просмотров

Вызов Aux для более высокого типа без привязки к оригиналу
Я пытаюсь использовать шаблон Aux с более высоким типом, и мне не нужно указывать параметр более высокого типа до тех пор, пока это не произойдет. Это похоже на вопрос SO, описанный здесь , но с одним существенным отличием: я Пойду наоборот, т.е....
43 просмотров

Существует ли класс типа, который проверяет наличие хотя бы одного неявного типа?
У меня есть черта Foo[T, U] и алгоритм уровня типа, который задает L <: HList и целевой тип U , сообщает мне, существует ли T в L , такое что есть неявное Foo[T, U] в области видимости. Это реализовано с использованием следующего класса...
299 просмотров

Обновление n-арного продукта из sop-core на совместимую сумму
Я работаю с библиотекой sop-core и хочу написать функцию со следующим типом: patch :: NS I xs -> NP Maybe xs -> NP Maybe xs xs - это список типов на уровне типа, например '[Int,Char,Bool] . I - это функтор тождества. NS I...
44 просмотров

Как проверить свойства списка на уровне типов в haskell?
У меня есть такие семейства типов: type family xs ++ ys where '[] ++ ys = ys (x : xs) ++ ys = x : (xs ++ ys) type family Drop n xs where Drop O xs = xs Drop (S n) (_ : xs) = Drop n xs type family Length xs where Length...
202 просмотров

как написать тип Invert в машинописном тексте, чтобы инвертировать порядок кортежей
type a = [1,2,3] type Invert<T extends any[] & {'0': any}> = ??? type b = Invert<a> // should yield [3,2,1] Я застрял, чтобы выяснить определение типа Invert кортежа, а также типов Init и Last , хотя они могут быть построены...
426 просмотров