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

Как динамически вызывать функцию, которая определена в нескольких модулях в одной и той же сигнатуре
Я определил множество функций (скажем, более 100), каждая из которых выполняет определенную работу, но с одной и той же сигнатурой. Это что-то вроде: module R001 (run) where run = <do-...> module R002 (run) where run = <do-...>...
698 просмотров
schedule 28.12.2022

Как избежать лишних отступов в цитатах декларации Template Haskell?
У меня есть игрушечная программа: $ cat a.hs main = putStrLn "Toy example" $ runghc a.hs Toy example Добавим к нему немного Template Haskell: $ cat b.hs {-# LANGUAGE TemplateHaskell #-} id [d| main = putStrLn "Toy example" |] $ runghc...
323 просмотров
schedule 04.02.2023

Есть ли в Haskell указатели/ссылки на членов записи?
Я могу создавать и ссылаться на относительные указатели на элементы структуры в C++, используя синтаксис ::* , .* и ->* , например: char* fstab_t::*field = &fstab_t::fs_vfstype; my_fstab.*field = ... В Haskell я могу легко...
596 просмотров

Распечатать и выполнить строку
Я обнаружил, что пишу много кода, например putStr "foo (bar 1) (bar 2) =" print $ foo (bar 1) (bar 2) Проблема в том, что распечатанное сообщение может рассинхронизироваться с фактически исполняемым кодом. Очевидное решение — автоматически...
580 просмотров
schedule 12.11.2022

Римляне, рубины и Haskell
Вдохновленный римлянами, рубинами и Д , я хотел посмотреть, можно ли то же самое сделать в Haskell. module Romans where import Language.Haskell.TH import Language.Haskell.TH.Syntax import Data.Text num :: String -> String num s = rep $ pack...
178 просмотров

Выражение квазицитата для AST, где один конструктор производит монадическое вычисление?
В очень упрощенном смысле у меня есть что-то вроде следующего: type Runtime a = {- More or less a StateT on top of an Either monad -} -- The list of strings in Fn is a bunch of parameter names, the values of -- which are pushed into the state of...
140 просмотров
schedule 13.12.2023

Ограничение этапа GHC (шаблон Haskell)
Я не мог понять, почему я получаю «ограничение стадии GHC» в следующем коде: import Language.Haskell.TH rules :: [ExpQ] rules = [ [| \a -> a |], [| \_ -> 1 |] ] findTransforms :: Int -> [ExpQ] -> Bool findTransforms _ [] = False...
585 просмотров
schedule 16.12.2023

Почему Template Haskell разрешает произвольные операции ввода-вывода во время компиляции?
Когда я пытался узнать о TH, я обнаружил, что он допускает произвольные IO действия во время компиляции (см. Что такого плохого в Template Haskell? ). Мне это кажется довольно опасным. Это почему? Это действительно необходимо для некоторых...
350 просмотров

Есть ли способ получения двоичных экземпляров для типов записей Vinyl с использованием Derive и Template Haskell или иным образом?
Я пробовал пакет Vinyl , который использует виды уровня типа для создания структур записей с полиморфизмом уровня поля. и автоматически предоставляемые линзы. Обе эти функции были бы очень удобны для моего проекта, так как первая позволяет...
442 просмотров

Ошибка Haskell типа данных
Я объявляю некоторый тип данных следующим образом: data TX_OR_TY = TX | TY data TX = X Int data TY = Y Float Теперь я пишу некоторую функцию, возвращающую их тип данных: funcTX :: TX funcTX = X 3 funcTY :: TY funcTY = Y 5 ordFuncTX :: TX...
182 просмотров

Автономное объявление производного объекта в цитате Template Haskell
Почему Template Haskell игнорирует автономное объявление производного объекта в цитате? {-# LANGUAGE TemplateHaskell, StandaloneDeriving #-} data Test a = Test a $([d| deriving instance Show a => Show (Test a); f x = x |]) ghci> :l...
827 просмотров
schedule 19.11.2022

Можно ли генерировать и запускать сгенерированный код TemplateHaskell во время выполнения?
Можно ли генерировать и запускать сгенерированный код TemplateHaskell во время выполнения? Используя C, во время выполнения я могу: создать исходный код функции, вызвать gcc, чтобы скомпилировать его в .so (linux) (или использовать llvm и т....
543 просмотров
schedule 02.05.2023

Функция для вывода имени функции
Можно ли в Haskell реализовать функцию, которая возвращает собственное имя функции? Возможный тип может быть (a -> b) -> String .
3487 просмотров

Как создать пакет, отличный от TH, из кода, сгенерированного с помощью Template Haskell?
Я делаю небольшой пакет, который определяет оболочки для кортежей и добавляет из них экземпляры, например newtype Tuple2 a = Tuple2 { untuple2 :: (a, a) } deriving (...) tuple2 :: a -> a -> Tuple2 a tuple2 = ... instance Traversable...
176 просмотров
schedule 15.07.2022

Компиляция строки в Exp с помощью TemplateHaskell
Я ищу способ скомпилировать строку действительного кода выражения Haskell в файл TH Exp . Например, если бы существовала соответствующая функция, я бы ожидал, что она будет вести себя следующим образом: > $(theFunctionImLookingFor "\a ->...
132 просмотров
schedule 12.06.2023

Можно ли получить тип любого выражения с помощью Template Haskell?
Учитывая выражение foo , я мог бы объявить функцию верхнего уровня bar = foo и получить тип foo как Type путем определения bar : case reify 'bar of VarI _ t _ _ -> t Есть ли прямой способ получить тип foo без создания...
401 просмотров

Можно ли генерировать комментарии к функциям в Template Haskell?
В нашем проекте у нас много функций, сгенерированных TH. Имеет смысл добавить к ним общие комментарии, чтобы они были видны в Haddock/Hoogle. По крайней мере, что-то вроде «Это было сгенерировано TH». Возможно ли что-то подобное?
465 просмотров

Как мне написать квазиквотер в терминах другого квазиквартального числа
Если я работаю со сторонним квазиквотером, например thirdParty :: QuasiQuoter , и хочу написать свой собственный в терминах этого квазиквотера, как мне это сделать? В ghci пробовал runQ [| [thirdParty| |] |] Но это выводит (в моем случае):...
64 просмотров
schedule 01.12.2022

Автоматическое объявление обработчиков yesod с помощью Template Haskell
Например, у меня есть следующий тип объекта в модели User json username Text и следующие типы Haskell: Entity User Удалить обработчик для пользователя: Файл маршрутов: /users/#UserId UserR DELETE Объявление...
115 просмотров
schedule 22.05.2023

Вычислить N-арное (с разными типами!!) декартово произведение в Haskell
Я знаю, что функция sequence может решить проблему [[1, 2], [3, 4]] -> [[1, 3], [1, 4], [2, 3], [2, 4]] . Но я думаю, что настоящий декартовский продукт должен решать проблему ([1, 2], ['a', 'b']) -> [(1, 'a'), (1, 'b'), (2, 'a'), (2,...
475 просмотров