Вопросы по теме '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 просмотров
schedule
29.08.2022
Является ли этот тип семейства инъективным?
У меня есть семейство типов для 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 просмотров
schedule
17.04.2022
Индуктивное определение над семейством замкнутого типа
Это более или менее та функциональность, которую я хочу реализовать:
{-# 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 просмотров
schedule
22.07.2023
Найти соответствие параметрическому параметру
Можно ли сопоставить параметр типа для произвольного типа через семейства типов или иным образом?
Я пытаюсь написать функцию типа
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