Публикации по теме 'typeclass'


Собираем все вместе с классами типов
Заключительная глава о Scala Implicits Journey Теперь, когда мы изучили три имплицита в Scala, пришло время собрать все воедино, чтобы показать, как глубоко и основательно Scala может упростить сложные проблемы. (Если вы не читали предыдущие три статьи и не знакомы с неявными классами или неявными параметрами, вы можете начать здесь .) В прошлой статье мы использовали класс Java NumberFormat , который делал для нас две вещи: Разбор строки для получения числа (например,..

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

Можно ли реализовать liftM2 на Scala?
В Haskell liftM2 можно определить как: liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r liftM2 f m1 m2 = do x1 <- m1 x2 <- m2 return $ f x1 x2 Я хотел бы перевести это на Scala. Моя первая попытка...
1365 просмотров
schedule 03.10.2021

Почему нельзя помещать сигнатуры типов в объявления экземпляров в Haskell?
Мне нравится помещать сигнатуры типов для всех определений верхнего уровня в свой код. Однако сигнатуры типов в объявлениях экземпляров кажутся недопустимыми, и если я их поставлю, я получаю сообщение об ошибке «Неуместная сигнатура типа» от GHC....
4534 просмотров

Как лучше всего поддерживать преобразователи монад в функциях, которые принимают монадические команды в качестве аргументов?
Скажем, у меня есть вычисление class A ???? where foo :: ???? () -> ???? () instance A IO where foo x = do print "prefix" x print "suffix" Теперь предположим, что я хочу написать instance A ???? => A...
166 просмотров
schedule 03.11.2021

Класс типа Haskell для Queue
Кто-нибудь написал класс типа Haskell (или существует комбинация классов типов), который описывает очередь FIFO. Data.Collection .Sequence кажется слишком сильным, но, с другой стороны, Data.Collection.Unfoldable кажется слишком слабым...
862 просмотров
schedule 27.10.2021

Добавление ограничений класса в экземпляр класса типов
Я пытаюсь реализовать функцию Cantor Pairing в качестве экземпляра общего класса типов Pair следующим образом: module Pair (Pair, CantorPair) where -- Pair interface class Pair p where pi :: a -> a -> p a k :: p a -> a l :: p...
592 просмотров
schedule 19.11.2021

Как совместно использовать validation.Constraint в нескольких формах?
Я использую ограничения в своих веб-формах, и я заметил, что несколько форм имеют похожие проверки, например, у меня есть несколько типов форм с датой начала и датой окончания. В каждом случае я хочу убедиться, что дата начала предшествует дате...
138 просмотров

Сопоставление с образцом в классах типов
Я новичок в Haskell, так что, скорее всего, я пропустил что-то очевидное ... Я пытаюсь написать общий алгоритм квантования цвета с использованием специального полиморфизма. Однако у меня возникают проблемы с получением данных с помощью...
343 просмотров
schedule 15.09.2021

Полиморфизм с классами типов Scala
Мы реорганизуем унаследованный method , чтобы вместо этого использовать класс типа - мы хотели бы сконцентрировать все method реализации в одном месте, потому что их разбросанность по реализующим классам затрудняет обслуживание. Однако мы...
2691 просмотров

Наследование классов типов разных типов в Coq
Это своего рода продолжение моего предыдущего вопроса: Наследование нескольких классов типов в Coq , но речь идет о классах типов, которые ожидают разные типы (в терминах Haskell, я полагаю?). У меня есть класс типов Collection, который ожидает...
100 просмотров
schedule 14.10.2021

Перевести / кодировать данные Haskell Obj = forall a. (Показать) = ›Obj a` в Scala
Я не смог придумать, как кодировать Obj в Scala: {-# LANGUAGE ExistentialQuantification #-} data Obj = forall a. (Show a) => Obj a instance Show Obj where show (Obj a) = "Obj " ++ show a main = print $ show [Obj "hello", Obj 3, Obj True]...
144 просмотров

Floating, Ord и RealFloat в Haskell
Я пытаюсь понять, почему это не компилируется yell :: (Floating a) => a -> [Char] yell x | x > 10.0 = "Yelling" | otherwise = "No Yell" но это yell :: (Floating a, Ord a) => a -> [Char] yell x | x > 10.0 =...
944 просмотров
schedule 25.11.2021

Проверка экземпляра класса типа не может обнаружить кусочные экземпляры
У меня есть семейство типов данных, проиндексированных целыми числами уровня типа, и я определяю их как экземпляры некоторого класса типов «кусочно», что вызывает проблемы при попытке получить экземпляры другого класса. Для иллюстрации я выделил...
45 просмотров

Конечное кодирование взаимно рекурсивных типов без тегов
Я пытаюсь выразить пару взаимно рекурсивных типов данных в кодировке final-tagless . Я умею писать: {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE ExplicitForAll #-} module Test where class ExprSYM repr where expr :: forall...
256 просмотров

Экземпляр семейства типов Haskell с ограничениями типа
Я пытаюсь представить выражения с помощью семейств типов, но, похоже, не могу понять, как написать ограничения, которые мне нужны, и я начинаю чувствовать, что это просто невозможно. Вот мой код: class Evaluable c where type Return c :: *...
886 просмотров

Создание экземпляров Ord с переносом нового типа
Учитывая такой тип данных, как data Foo = Bar | Baz | Qux и я хочу иметь несколько разных порядков для этого типа, является ли следующий наиболее распространенный / стандартный способ добиться этого? newtype FooPriorityA = FooPriorityA {...
187 просмотров
schedule 13.11.2021

Получение `Show a` из контекста` Show (a, b) `
Как сказано в названии, я заинтересован в использовании Show a в контексте, в котором у меня есть Show (a,b) . Эта проблема легко возникает с GADT следующим образом: data PairOrNot a where Pair :: (b,c) -> PairOrNot (b,c) Not :: a ->...
153 просмотров
schedule 28.11.2021

`instance` для конкретного типа вместо класса типов?
Я определил простой тип списка: data MyList a = End |Entry a (MyList a) Вместо deriving (Show) я реализовал это явно сам для всех MyList a , где a является экземпляром Show . instance Show a => Show (MyList a)...
176 просмотров
schedule 22.11.2021

Ограничение типа записи в Идрисе
Я пытаюсь написать запись в Идрисе, но у нее есть общий параметр, который должен быть ограничен интерфейсом. Для обычных типов объединения я могу написать: data BSTree : (a : Type) -> Type where Empty : Ord a => BSTree a Node : Ord a...
279 просмотров
schedule 17.11.2021

Использование параметров класса неявного типа в нотации Coq
Я пытаюсь осмыслить классы типов в Coq (я баловался этим в прошлом, но я далек от того, чтобы быть опытным пользователем). В качестве упражнения я пытаюсь написать библиотеку теории групп. Вот что я придумал: Class Group {S : Type} {op : S → S →...
176 просмотров
schedule 30.09.2021

Не удалось найти неявное значение для параметра, определенного в сопутствующем объекте
В приведенном ниже примере класса минимального типа scala 2.12.6 / sbt 1.2.1 жалуется could not find implicit value for parameter tc: tryout.Tryout.TypeClassTrait[Int] . Если я раскомментирую строку println , она компилируется. Я ожидал, что это...
335 просмотров