Вопросы по теме '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 просмотров
schedule
18.09.2022
Распечатать и выполнить строку
Я обнаружил, что пишу много кода, например
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 просмотров
schedule
03.09.2022
Выражение квазицитата для 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 просмотров
schedule
19.02.2022
Есть ли способ получения двоичных экземпляров для типов записей Vinyl с использованием Derive и Template Haskell или иным образом?
Я пробовал пакет Vinyl , который использует виды уровня типа для создания структур записей с полиморфизмом уровня поля. и автоматически предоставляемые линзы. Обе эти функции были бы очень удобны для моего проекта, так как первая позволяет...
442 просмотров
schedule
08.08.2022
Ошибка 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 просмотров
schedule
24.02.2022
Автономное объявление производного объекта в цитате 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 просмотров
schedule
22.07.2023
Как создать пакет, отличный от 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 просмотров
schedule
13.05.2023
Можно ли генерировать комментарии к функциям в Template Haskell?
В нашем проекте у нас много функций, сгенерированных TH. Имеет смысл добавить к ним общие комментарии, чтобы они были видны в Haddock/Hoogle. По крайней мере, что-то вроде «Это было сгенерировано TH». Возможно ли что-то подобное?
465 просмотров
schedule
29.06.2023
Как мне написать квазиквотер в терминах другого квазиквартального числа
Если я работаю со сторонним квазиквотером, например 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 просмотров
schedule
24.09.2022