Публикации по теме '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 просмотров
schedule
07.10.2021
Как лучше всего поддерживать преобразователи монад в функциях, которые принимают монадические команды в качестве аргументов?
Скажем, у меня есть вычисление
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 просмотров
schedule
29.09.2021
Сопоставление с образцом в классах типов
Я новичок в Haskell, так что, скорее всего, я пропустил что-то очевидное ...
Я пытаюсь написать общий алгоритм квантования цвета с использованием специального полиморфизма. Однако у меня возникают проблемы с получением данных с помощью...
343 просмотров
schedule
15.09.2021
Полиморфизм с классами типов Scala
Мы реорганизуем унаследованный method , чтобы вместо этого использовать класс типа - мы хотели бы сконцентрировать все method реализации в одном месте, потому что их разбросанность по реализующим классам затрудняет обслуживание. Однако мы...
2691 просмотров
schedule
05.12.2021
Наследование классов типов разных типов в 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 просмотров
schedule
21.11.2021
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 просмотров
schedule
08.10.2021
Конечное кодирование взаимно рекурсивных типов без тегов
Я пытаюсь выразить пару взаимно рекурсивных типов данных в кодировке final-tagless .
Я умею писать:
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE ExplicitForAll #-}
module Test where
class ExprSYM repr where
expr :: forall...
256 просмотров
schedule
16.11.2021
Экземпляр семейства типов Haskell с ограничениями типа
Я пытаюсь представить выражения с помощью семейств типов, но, похоже, не могу понять, как написать ограничения, которые мне нужны, и я начинаю чувствовать, что это просто невозможно. Вот мой код:
class Evaluable c where
type Return c :: *...
886 просмотров
schedule
25.09.2021
Создание экземпляров 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 просмотров
schedule
20.11.2021