Вопросы по теме 'template-haskell'

Как я могу легко увидеть вывод оператора Template Haskell?
У меня есть следующий код Template Haskell в моем модуле, который является частью более крупного приложения. $(derive makeFoldable ''JStatement) Я подозреваю, что сгенерированный экземпляр Foldable — это не совсем то, что я изначально имел в...
735 просмотров

Шаблон Haskell: zipn
Я читал руководство по шаблонам Haskell с archive.org, так как он был утерян с haskell.org, и заметил, что он поврежден, как будто были вынуты случайные части. Я надеялся прочитать об их реализации zipn. Единственный код, который у них есть,...
336 просмотров
schedule 17.03.2024

Как проверить имя конструктора данных в кавычках в Template Haskell?
Я пытаюсь изучить шаблон Haskell. В качестве упражнения я написал функцию, которая может генерировать такие вещи, как isLeft и isRight (вдохновленный этим вопросом ). Вот моя скромная попытка: isA connam = do ConE nam <- connam...
241 просмотров
schedule 02.03.2023

Предпочтительный метод просмотра кода, сгенерированного Template Haskell
Как вы знаете, Template Haskell используется для программной генерации различных видов сплайсов AST во время компиляции. Однако сращивание часто может быть очень непрозрачным, и часто бывает трудно различить, что на самом деле генерируется...
3751 просмотров

Почему этот шаблон Haskell работает?
Рассмотрим этот код: magic :: String -> Q Exp magic s = [e| putStrLn s |] Теперь, насколько я могу судить, на самом деле это не должно работать. Внутри оксфордских скобок s не входит в область действия. И тем не менее, вышеописанное,...
301 просмотров
schedule 02.01.2023

Развертывание цикла и рекурсии
W_t = M_t[i] if 0 <= t <= 15 W_t = ROTL_1(W_(t-3) XOR W_(t-8) XOR W_(t-14) XOR W_(t-16)) if 16 <= t <= 79 Это из стандартов SHA-1. В haskell вы бы тривиально написали рекурсивную функцию для этого, но чтобы сделать ее более...
593 просмотров

Объединение произвольных выражений в квазиквотере Haskell
Прочитав Почему приятно, когда вас цитируют , в разделе 3 приведен пример объединения переменных. идентификатор в квазикавычках. subst [:lam | $exp:e1 $exp:e2 |] x y = let e1' = subst e1 x y e2' = subst e2 x y in [:lam |...
215 просмотров
schedule 29.09.2022

Шаблон профилирования Haskell
У меня есть TH-тяжелый файл, компиляция которого занимает около 30 секунд. Какие приемы я могу использовать для отладки производительности моего Template Haskell?
409 просмотров
schedule 08.04.2023

Как разрешить вложение не только значений, но и произвольных выражений haskell в антикавычки
Недавно я научился реализовывать квазикавычки с возможностями антикавычек, например printfQ , в следующем фрагменте кода: main = do let itemName = "apple" price = 1.29 [printfQ| The price of #{itemName} is #{price}. |] Строка...
239 просмотров
schedule 21.09.2022

PersistMap в Йесод?
Я использую Yesod для разработки веб-сайта и хочу использовать тип данных PersistMap для сопоставления записей с текстовыми именами. Однако я не могу найти примеры того, как объявить поле PersistMap в файле config/models. Когда я пытаюсь...
117 просмотров

компиляция общего объекта, написанного на haskell и шаблоне haskell, и связывание его с main на c
Я пытаюсь скомпилировать несколько грамотных файлов haskell (.lhs) в общий объект (.so), а затем связать его с основным, написанным на c. Однако проблема здесь в том, что 2 файла, используемых для создания .so, являются шаблоном haskell. я следовал...
682 просмотров
schedule 08.11.2022

Читать модуль из файла в TemplateHaskell
Таким образом, у большинства квази-кавычек для TemplateHaskell есть опция, в которой вы можете прочитать строку в квази-кавычках из файла, вместо того, чтобы печатать ее в квадратных скобках, таких как [quoter|... some code ...|] . Мне интересно,...
125 просмотров
schedule 01.06.2022

Игнорирование/переопределение экземпляра, сгенерированного с помощью TemplateHaskell
Я использую Aeson для некоторых клиент-серверных вещей, которые я делаю, кодируя ADT как Json. Я использую Data.Aeson.TH для создания экземпляров toJSON , которые мне нужны, но экземпляры, созданные для типов Map, действительно уродливы и ужасны в...
188 просмотров

StateT с монадой Q из шаблона haskell
Я хотел бы создать функцию, которая принимает некоторые объявления типа Dec (которые я получаю от [d| ... |]) и модифицирую их. Модификации будут зависеть от предыдущих объявлений, поэтому я хотел бы иметь возможность хранить их в карте, скрытой в...
296 просмотров

Полевое распределение Monoid, Applicative, Monad и т. д. для записей Haskell
Есть ли пакет, который делает примерно следующее: Дана запись: data R = R { a :: TypeA, b :: TypeB, c :: TypeC } выводит поднятую запись: data R_L f = R_L { a_L :: f TypeA, b_L :: f TypeB,...
189 просмотров
schedule 08.07.2023

Составной первичный ключ в Йесод
Я новичок в Haskell и уже около недели экспериментирую с yesod. Я пытался подключиться к существующей базе данных с составным первичным ключом в sqlite. Мне удалось заставить код работать с Database.Persist.Sqlite как с отдельным приложением....
308 просмотров
schedule 28.04.2022

Как использовать getQ и putQ в шаблоне haskell?
Я хотел бы обрабатывать состояния в монаде Q с помощью Template Haskell. Согласно некоторым ответам на переполнение стека, есть решение, которое использует unsafePerformIO , но я хочу избегать его использования, пока могу. Я нашел getQ и putQ...
395 просмотров
schedule 02.05.2022

Препроцессор в Haskell
Я хочу сгенерировать import qualified Aaaa.Bbb.Ccc as Ccc автоматически во время компиляции . Есть ли способ сделать это? Может быть, с помощью Template Haskell или как-то еще с любым расширением? Я думаю, что это похоже на макросы в C и...
440 просмотров
schedule 09.04.2022

Создайте динамическое имя в шаблоне haskell, используя текущую область
Я пишу шаблон haskell splice и изо всех сил пытаюсь создать правильный тип Name s. Если я хочу сгенерировать известное имя (скажем, функцию f ), я могу использовать 'f . Это требует, чтобы f находился в области, где я определяю соединение, а не...
169 просмотров
schedule 16.09.2023

Замените функцию проецирования записи линзами
Почти каждый раз, когда я делаю запись, я сразу после этого добавляю makeLenses ''Record (из линзы ), и Я никогда не использую проекционные функции, которые дает мне запись. На самом деле, глядя на то, что производит makeLenses (с флагом GHC...
335 просмотров
schedule 28.06.2023