Описание тега typeclass

Классы типов в Haskell - это языковой механизм для поддержки специального полиморфизма. Они также существуют в Scala, Coq и Isabelle.
2 ответа

Haskell: Почему (+), (-) являются частью класса типов Num?

Из ghci: Prelude> :i Num class Num a where (+) :: a -> a -> a (-) :: a -> a -> a (*) :: a -> a -> a negate :: a -> a abs :: a -> a signum :: a -> a fromInteger :: Integer -> a -- Defined in `GHC.Num' instance Num Wor…
13 янв '16 в 02:40
2 ответа

Реализация >>= в новом типе

Позвольте мне начать с задачи, которую я хочу решить, возможно, я иду не в ту сторону. Я использую Snap Framework для игрушечного проекта, и главное, что он работает под Snap монада. Мне нужно добавить свое состояние над ним. Я использую монадный тр…
26 май '12 в 09:42
1 ответ

Что означает `~` (тильда) в контексте экземпляра, и почему в некоторых случаях необходимо разрешать перекрытие?

Осложнение Рассмотрим следующий фрагмент: class D u a where printD :: u -> a -> String instance D a a where printD _ _ = "Same type instance." instance {-# overlapping #-} D u (f x) where printD _ _ = "Instance with a type constructor." И вот…
01 сен '18 в 08:14
3 ответа

Установка типа дробного числа

Может ли кто-нибудь объяснить, почему это компилирует Prelude> 1 :: Num a => a и это не Prelude> 1.0 :: Num a => a Второй пример будет работать с Fractional, но Num это суперкласс Fractional, Так же, как это суперкласс Integral,
11 фев '17 в 11:27
2 ответа

Как работает равенство для числовых типов?

Я вижу, что Haskell позволяет сравнивать разные числовые типы: *Main> :t 3 3 :: Num t => t *Main> :t 3.0 3.0 :: Fractional t => t *Main> 3 == 3.0 True Где находится исходный код Eq экземпляр для числовых типов? Если я создаю новый тип…
01 авг '16 в 20:24
3 ответа

Когда нужны подписи типа в Haskell?

Многие вводные тексты скажут вам, что в типах подписей на Haskell "почти всегда" необязательно. Кто-нибудь может дать количественную оценку "почти" части? Насколько я могу судить, единственная необходимость в явной подписи - это устранение неоднозна…
21 ноя '14 в 18:28
1 ответ

Существует ли класс типов Purescript, обобщающий целые числа?

Haskell имеет Integral класс типов, который включает Integer, Int, Int32, Int64, Natural, так далее. Есть ли подобный класс типов в Purescript?
06 июн '16 в 21:34
1 ответ

Несовместимые экземпляры Eq и Ord?

У меня есть большая программа на Haskell, которая работает очень медленно. Профилирование и тестирование показали, что большая часть времени тратится на сравнение равенства и упорядочения определенного большого типа данных, что очень важно. Равенств…
14 июн '13 в 18:19
2 ответа

Неверный контекст типа данных при моделировании циклического планировщика в Haskell

Я моделирую планировщик циклического перебора в Хаскеле. class Schedulable s where isFinal :: s -> Bool class Scheduler s where add :: (Schedulable a) => a -> s -> s next :: (Schedulable a) => s -> (a, s) empty :: s -> Bool data…
06 дек '12 в 12:36
2 ответа

Вернуть объект, привязанный к классу типов из метода

У меня есть класс типов для Path. Он содержит метод увеличения (путь увеличивается путем перемещения по вершинам), который должен иметь возможность возвращать любой тип, который снова соответствует классу типов Path. Я подумал, что-то вроде этого до…
25 май '14 в 20:11
1 ответ

Можно ли ввести дополнительные переменные типа в ограничение суперкласса?

При работе с семействами типов часто удобно использовать ограничения равенства, чтобы избежать необходимости повторять имя какой-либо функции типа в сигнатуре: class Foo f where type BulkyAssociatedType f :: * foo :: BulkyAssociatedType f -> f ..…
1 ответ

Haskell: проблема преобразования результата деления в целочисленный тип

Я изучаю Хаскель и застрял, пытаясь понять систему типов. Я пытаюсь написать функцию, которая возвращает длину серии 'Half or Three Plus One' для ввода. Вот моя попытка использования функции с использованием рекурсивного подхода (функция действитель…
17 ноя '10 в 09:45
1 ответ

Рекурсивное использование методов класса типов в Coq

Есть ли способ использовать рекурсию с классами типов Coq? Как, например, при определении шоу для списков, если вы хотите вызвать show функция для списков рекурсивно, тогда вам придется использовать точку фиксирования следующим образом: Require Impo…
15 сен '18 в 20:36
1 ответ

Вывод списка параметров частичного типа в параметр универсального значения

Почему Скала не может сделать такой вывод? def notInfering[A,B,C](aa: A=>Boolean, bbcc: Tuple2[B,C]) = bbcc notInfering[Int]((_ > 3), ("string", 123)) Компилятор сердито говорит, что мне нужно указать аргументы типа B и C. Они работают, но они…
23 мар '15 в 01:26
2 ответа

Почему я могу опустить конструктор при обращении к типам с переносом чисел нового типа?

На странице 321 из реального мира Haskell Есть эти коды, ... {-# LANGUAGE GeneralizedNewtypeDeriving #-} newtype AInt = A { unA::Int } deriving (Show, Eq, Num) instance Monoid AInt where mempty = 0 Мое замешательство, почему это mempty = 0 но нет me…
16 апр '13 в 04:17
2 ответа

Полугруппа / моноид / иерархия классов типов групп в ошибках Haskell

Я пытаюсь создать "иерархию" классов алгебраических типов следующим образом: class Semigroup a where (.*) :: a -> a -> a foldr1 (.*) = foldl1 (.*) -- GHCi error: "`foldr1' is not a (visible) method of class `Semigroup'" class (Semigroup a) =&g…
13 июл '11 в 08:09
2 ответа

Как я могу объединить два ограничения типа с логическим или в Haskell?

В Haskell нам дана возможность комбинировать ограничения на типы с логическим и. Рассмотрим следующее type And (a :: Constraint) b = (a, b) или сложнее class (a, b) => And a b instance (a, b) => And a b Я хочу знать, как логически или два огра…
21 апр '12 в 00:36
1 ответ

Разница в использовании между предопределенными классами типов и базовыми типами

Я читаю некоторые примеры из LYAH и наткнулся на этот фрагмент кода: replicate' :: (Num i, Ord i) => i -> a -> [a] replicate' n x | n <= 0 = [] | otherwise = x:replicate' (n-1) x Это из онлайн-версии, но у меня также есть копия книги, в …
20 янв '16 в 21:33
1 ответ

Вычисление скользящего среднего для универсального типа

Я пытаюсь сделать что-то, что было бы легко, если бы я мог использовать классы типов в F#. Я хочу иметь возможность вычислить скользящее среднее для произвольного типа, для которого я определил сложение, скалярное умножение и скалярное деление. Это …
02 фев '14 в 19:36
1 ответ

Экземпляр FromJSON для ключа HashMap нового типа

Я сделал новый тип UUID в моем заявлении представлять Text Идентификаторы. {-# LANGUAGE GeneralizedNewtypeDeriving #-} ... newtype UUID = UUID Text deriving (Eq, Generic, FromJSON, ToJSON, FromField, ToField, FromText, Show, Read, Hashable) Моему пр…
16 дек '15 в 17:13