Вопросы по теме 'typeclass'

Определение, казалось бы, простого экземпляра Foldable
Как будет выглядеть экземпляр Foldable для этого типа данных? data X t = X t [X t] Я пробовал это: instance Foldable X where foldMap f (X x xs) = f x `mappend` foldMap f xs Но получил эту ошибку: Occurs check: cannot...
328 просмотров
schedule 27.04.2024

Как я могу устранить эту ошибку переменной неоднозначного типа?
Следующий код компилируется отлично, но я не могу использовать свою функцию: КОД: g :: (Fractional b, Integral b) => Int -> b -> b g 1 x = x / (g 2 x + 1) g 100 x = 2401*x/100 g n x = ((map (\z -> (ceiling z)^2)...
729 просмотров
schedule 22.12.2023

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

Haskell: ограничения по умолчанию для ввода
Рассмотрим этот пример: applyKTimes :: Integral i => i -> (a -> a) -> a -> a applyKTimes 0 _ x = x applyKTimes k f x = applyKTimes (k-1) f (f x) applyThrice :: (a -> a) -> a -> a applyThrice = applyKTimes 3 3 в...
3228 просмотров
schedule 07.05.2023

Слияние/объединение двух классов в один в Haskell
У меня есть два непересекающихся набора типов, и я хочу создать другой набор, объединяющий эти два. Пример кода: class A a class B b class AB ab instance A a => AB a instance B b => AB b GHC 6.12.3 не позволяет объявить это сообщением...
470 просмотров
schedule 03.11.2023

Есть ли в Haskell какой-либо способ выразить, что тип должен быть экземпляром класса типов более чем одним способом?
(Заранее извините, если вопрос глупый или очевидный - у меня нет большого опыта работы с Haskell). Есть ли способ выразить, что тип должен быть экземпляром класса типов более чем одним способом? Лучше всего это проиллюстрировано на примере...
838 просмотров
schedule 23.04.2022

Вырожденное объявление экземпляра класса типов с использованием постоянного значения
Я сократил все до самого необходимого, так что терпите меня, если приведенный ниже пример кода является надуманным. Допустим, у нас есть: class Foo a where foo :: a data Type a = Type a instance (Foo a) => Foo (Type a) where foo =...
239 просмотров
schedule 09.09.2023

Добавление ограничений типа в контекст объявлений экземпляров в Haskell
Я пытаюсь представить взвешенные ребра. В конечном итоге я хочу, чтобы OutE был экземпляром Eq и Ord с ограничением, что etype является экземпляром Eq и Ord. Предположим, у меня есть следующий файл как temp.hs: data (Ord etype)=> OutE vtype...
6167 просмотров

Haskell создает дополнительные экземпляры для импортированных типов данных
Я относительно новичок в Haskell. Пишу клон карточной игры uno и хочу красиво раскрасить карту. Я делаю import System.Console.ANSI который обеспечивает data Color = Black | Red | Green | Yellow...
367 просмотров
schedule 09.03.2023

Иерархия классов типов Haskell в Java
Я пишу библиотеку с интерфейсами Java, напоминающими классы типов Haskell, и абстрактными классами, реализующими все "производные" методы (например, Monad.join можно записать с использованием >>= и return ). Это моя запланированная...
743 просмотров

GHC выбирает разные экземпляры для одного и того же выражения?
Я хочу реализовать стрелку с arr -функцией-членом, показывающей различное поведение для аргументов функции с разными типами, например, arr (\x -> (x,x)) должно вести себя иначе, чем arr id ... Вот код: {-# LANGUAGE Arrows,...
217 просмотров
schedule 11.03.2023

Будет ли иметь смысл класс типов между категорией и стрелкой?
Часто у вас есть что-то вроде Applicative без pure или что-то вроде Monad , но без return . Пакет semigroupoid охватывает эти случаи с Apply и Bind . Теперь я нахожусь в похожей ситуации с Arrow , где я не могу определить осмысленную...
1027 просмотров

В чем разница между типом и типом данных в Haskell?
Я немного не понимаю разницы между типом и типом данных в Haskell. Из литературы, с которой я столкнулся, у меня сложилось впечатление, что это разные понятия.
19362 просмотров
schedule 10.05.2022

Переменные неоднозначного типа для зависимых ограничений класса
Я пишу новую систему аутентификации для веб-фреймворка Snap , потому что встроенная недостаточно модульная, и у него есть некоторые функции, которые являются избыточными / «мертвым грузом» для моего приложения. Однако эта проблема вообще не связана...
402 просмотров

Как дополнительно ограничить существующий класс типов в Haskell
Есть ли способ дополнительно ограничить контекст существующего класса типов? Например, класс типов Functor : class Functor f where fmap :: (a -> b) -> f a -> f b Это определение класса не требует, чтобы a или b были...
237 просмотров

Как легко сделать Data.List.Vector членом Arbitrary?
Я использую Data.List.Vector в своей программе, и теперь я хотел бы использовать для него quickCheck. Однако для этого нет экземпляра. Поскольку для [Double] уже есть произвольное значение, я подумал, что могу сделать что-то вроде instance...
323 просмотров
schedule 02.11.2022

Почему этот код класса типов Haskell не работает?
Пытаюсь понять классы типов Haskell. Почему не работает следующее? {-# LANGUAGE FlexibleInstances #-} class IntClass t instance IntClass Int intToIntClass :: (IntClass r) => Int -> r intToIntClass x = x Ясно, что «экземпляр» не...
722 просмотров
schedule 01.05.2024

Обзор экземпляров класса типа Scalaz для других библиотек
Я часто обнаруживаю, что мне нужны экземпляры класса типа Scalaz для классов в других библиотеки Scala или Java. Приведу лишь несколько примеров: Экземпляр моноида для Shapeless HList дает вам экземпляры моноидов для case-классов с...
414 просмотров
schedule 05.03.2022

Как здесь избежать явных подписей типов?
class Listy a b where fromList :: [b] -> a toList :: a -> [b] lifted :: ([b] -> [b]) -> (a -> a) lifted f = fromList . f . toList data MyString = MyString { getString :: String } deriving Show instance Listy MyString...
178 просмотров
schedule 17.02.2023

вывод параметра типа + типы более высокого порядка + классы типов = :-(
import scalaz._; import Scalaz._ def foo[M[_]:MonadPlus,A](a:A) = a.point[M] // foo: [M[_], A](a: A)(implicit evidence$1: scalaz.MonadPlus[M])M[A] def bar1[M[_]:MonadPlus](i:Int): M[Int] = foo(i) // <-- error: ambiguous implicit values //...
195 просмотров
schedule 11.12.2023