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

Что означает эта «переменная неоднозначного типа« a »в ограничении»?
В этом коде я пытаюсь сделать так, чтобы первый параметр в моей рабочей функции go был типом «семейство типов». Я вижу, что в документации семейств типов аналогичная функция insert принадлежит классу типов, а в моем примере ниже это не. Я...
759 просмотров
schedule 21.06.2023

Как распечатать результат добавления функции из класса Добавить из Fun с помощью функций типа
Ниже приведен код отсюда Развлечение с функциями типов {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, TypeFamilies #-} -- Start basic class Add a b where type SumTy a b add :: a -> b -> SumTy a b instance...
220 просмотров
schedule 18.09.2022

Семейства типов и конструкторы типов
Я работаю над заменой классов типов с несколькими параметрами в некоторых моих библиотеках синонимами типов. Все шло отлично, пока мне не понадобилось работать с конструктором типов. Последние две строки этого кода не скомпилируются. {-#...
745 просмотров
schedule 11.10.2022

ограничение класса в определении типа данных
Я не мог сделать следующую компиляцию: class Typeable f => Foo f where data Bar :: Typeable Другими словами, я хотел определить класс Foo , у которого есть связанный тип, который должен быть экземпляром Typeable . Похоже, я могу...
78 просмотров
schedule 22.06.2023

Неоднозначность типов в семействах типов Haskell
Я пытаюсь собрать следующий класс Domain и его экземпляр TrivialDomain {-# LANGUAGE TypeFamilies #-} data Transition = Transition class Domain d where type Set d type Engine d :: * -> * top :: Engine d (Set d) -- ......
202 просмотров
schedule 03.01.2023

Замена одноэлементных типов данных семейством данных
Итак, в моем текущем проекте я выполняю кучу логики на уровне типов с одноэлементными типами. Например: {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE GADTs...
116 просмотров
schedule 19.11.2023

Почему не отвергаются безусловно неоднозначные методы, использующие семейства типов?
У меня есть следующие объявления: class NN a where type Vector a :: * vectorize :: Vector a -> WordVector compute :: a -> SomeResult В случае NN у меня есть это: instance NN Model where type Vector Model = Vec...
60 просмотров
schedule 15.02.2023

Ограничение экземпляров
Допустим, у нас есть следующее: {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeFamilyDependencies #-} type family CategoryLikeT p_a_b = t | t -> p_a_b type IsCategoryLike p t...
61 просмотров
schedule 05.09.2023

Есть ли общий способ применить ограничения к приложению типа?
комментарий пользователем 2426021684 заставил меня исследовать, можно ли придумать функцию типа F , такую, что F c1 c2 fa демонстрирует, что для некоторых f и a : fa ~ f a c1 f c2 a Оказывается, простейшая форма этого...
144 просмотров

Является ли этот тип семейства инъективным?
У меня есть семейство типов для N-арной функции от n аргументов типа t до значения типа o : type family NAry (n :: Nat) (t :: Type) (o :: Type) = (r :: Type) | r -> n t o where NAry 1 t o = t -> o NAry n t o = t -> (NAry (n -...
174 просмотров
schedule 21.08.2023

Вывод ограничений как для if, так и для else равенства типов
Я пытаюсь заполнить дыру в следующем фрагменте import Data.Proxy import GHC.TypeLits import Data.Type.Equality import Data.Type.Bool import Unsafe.Coerce ifThenElse :: forall (a :: Nat) (b :: Nat) x l r. (KnownNat a, KnownNat b, x ~ If (a==b) l...
161 просмотров
schedule 16.06.2023

Как упростить эту функцию уровня типа, которая сравнивает символы?
У меня есть код, в котором мне нужна функция уровня типа, которая принимает два списка пар ключ-значение, отсортированных по ключам, и имеет каждый ключ только один раз, а затем объединяет их в один такой список (предпочитая первый список, если ключи...
146 просмотров
schedule 29.07.2022

Типы ограничений в конструкторе GADT
У меня простой ADT data Concept a = Entity a | Role a | Relation a | Resource a | Sub (Concept a) Теперь я хочу создать GADT, используя этот ADT, который будет ограничивать сигнатуру типа его конструкторов. Этот код не будет работать, но я...
242 просмотров

Индуктивное определение над семейством замкнутого типа
Это более или менее та функциональность, которую я хочу реализовать: {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE...
127 просмотров
schedule 09.04.2023

Использование семейств типов и обобщений для поиска значения идентификатора
Этот вопрос связан с этим , где я хотел избежать шаблонного извлечение значения Id из структуры данных, но безопасным для типов способом. Я повторю соответствующие детали проблемы здесь: предположим, что у вас есть тип Id : newtype Id = Id...
115 просмотров
schedule 11.05.2022

Почему переменная этого типа неоднозначна, хотя должна быть в области видимости?
Рассмотрим следующий код: {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ScopedTypeVariables #-} class Foo a where type Bar a class Foo a => Foo2 a where bar :: Bar a Это дает следующее сообщение об ошибке в GHC 8.2: error: •...
239 просмотров
schedule 19.07.2022

Тип Family как аргумент для ввода синонима
У меня есть тип данных, который выглядит как data G f n a where G :: a -> G f n a -> G f (f n) a Это контейнер, индексированный натуральными числами, который принимает функцию, определяющую, как действовать индуктивно. Я могу...
328 просмотров
schedule 20.05.2023

Определение универсального подъема арности
Я пытаюсь определить liftN для Haskell. Реализация на уровне значений в динамически типизированных языках, таких как JS, довольно проста, у меня просто возникли проблемы с выражением ее на Haskell. После некоторых проб и ошибок я пришел к...
156 просмотров

Найти соответствие параметрическому параметру
Можно ли сопоставить параметр типа для произвольного типа через семейства типов или иным образом? Я пытаюсь написать функцию типа type family Match s t a который принимает две структуры, s и t (которые предполагаются двумя разными...
85 просмотров
schedule 27.12.2022

Понимание семейства типов
У меня есть следующий код: {-# LANGUAGE TypeFamilies #-} type family Times (a :: Nat) (b :: Nat) :: Nat where Times Z n = Z Times (S m) n = Plus n (Times m n) Я знаю, что семейства типов позволяют вам писать функции на уровне типов....
81 просмотров
schedule 27.10.2022