Описание тега template-haskell

Template Haskell - это расширение GHC для Haskell, которое добавляет средства метапрограммирования времени компиляции. Это позволяет пользователям писать программы, которые генерируют или изменяют их программу во время компиляции: форма макросов времени компиляции.
2 ответа

Как вы уточняете / проходите определение записи в Haskell?

Дана запись (не экземпляр записи, само определение записи), например: data Request = Expand { shortUrl :: [String] , hash :: [String] } | Shorten { longUrl :: String , domain :: String } | LinkEdit { link :: String , title :: Maybe String , note :: …
14 мар '14 в 01:41
1 ответ

Почему GHC не заканчивается этим шаблоном Haskell шаблона GADT?

У меня проблема с генерацией GADT с шаблоном Haskell. Проблема в том, что я не могу заставить код полностью скомпилироваться. GHCI не завершает работу при загрузке файла, и процесс GHC использует много памяти и процессоров, насколько это возможно (2…
25 янв '13 в 15:52
1 ответ

Как явно назвать квазиквотер для синтаксиса haskell?

Я строю eDSL поверх HaTeX. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу отобразить выражения Haskell в своем документе LaTeX и использовать то же выражение Haskell, чтобы помочь сгенерировать документ. Очевидный ответ - скопирова…
05 дек '16 в 18:16
1 ответ

Определение реализации метода на основе доступных ограничений

Предположим, у меня есть следующие функции запоминания. (Игнорируйте тот факт, что они чисты, пожалуйста.) memoEq :: Eq a => (a -> b) -> a -> b memoOrd :: Ord a => (a -> b) -> a -> b memoHash :: Hashable a => (a -> b) -…
29 май '13 в 13:20
1 ответ

Используйте Template Haskell для рекурсивной генерации экземпляра.

В GenericPretty есть класс Out с реализацией по умолчанию, использующей магию GHC.Generic. Как вы можете видеть, я определил тип данных Person, и если я хочу реализовать класс Out, мне придется писать 3 раза вручную, поскольку Person использует типы…
30 ноя '14 в 15:12
1 ответ

Синтаксическая ошибка в моде Haskell

Я следую учебнику по Haskell: http://www.seas.upenn.edu/~cis194/lectures/01-intro.html Я тестирую функции в ghci, я дошел до этой части: hailstone :: Integer -> Integer hailstone n | n `mod` 2 == 0 = n `div` 2 | otherwise = 3*n + 1 У меня есть эт…
03 июл '14 в 01:40
1 ответ

Напишите = внутри QuasiQuotes

Как мне написать = внутри выражения QuasiQuote? [uri|https://graph.facebook.com/me?fields=id,name,email|] В настоящее время я получаю example/Facebook/test.hs:56:83: error: parse error on input ‘=’ Perhaps you need a 'let' in a 'do' block? e.g. 'let…
22 мар '17 в 19:00
1 ответ

PersistMap в Йесод?

Я использую Yesod для разработки веб-сайта, и я хотел бы использовать тип данных PersistMap для сопоставления записей с текстовыми именами. Тем не менее, я не могу найти примеры того, как объявить поле PersistMap в файле config/models. Когда я пытаю…
19 дек '13 в 05:08
2 ответа

Чтение модуля из файла в TemplateHaskell

Таким образом, большинство квази-кавычек для TemplateHaskell имеют опцию, в которой вы можете прочитать строку квази-кавычки из файла, вместо того, чтобы вводить ее в скобках, например: [quoter|... some code ...|], Мне интересно, есть ли эквивалент …
07 янв '14 в 04:30
1 ответ

Можно ли получить тип любого выражения, используя Template Haskell?

Дано выражение fooЯ мог бы объявить функцию верхнего уровня bar = foo и получить тип foo как Type путем овеществления bar: case reify 'bar of VarI _ t _ _ -> t Есть ли прямой способ получения типа fooбез создания избыточного определения bar? Идеа…
31 янв '14 в 21:56
1 ответ

Осведомленность Cabal о внешних зависимостях TemplateHaskell

Чтобы встроить некоторые статические файлы в сборку, я использую: https://hackage.haskell.org/package/file-embed-0.0.10.1/docs/Data-FileEmbed.html Это позволяет вам делать: MyFile.hs myFile :: Data.ByteString.ByteString myFile = $(embedFile "somethi…
10 апр '18 в 15:09
2 ответа

Автоматический вывод Data.Vector.Unbox с синонимами связанных типов

У меня есть тип данных newtype Zq q = Zq (IntType q) где 'q' будет экземпляром класса class Foo a where type IntType a и "IntType" - это просто базовое представление (то есть Int, Integral и т. д.), связанное с "q". Я хочу сделать Zq экземпляром Dat…
1 ответ

Постоянная времени компиляции в Haskell

Я пытаюсь встроить предварительно вычисленные данные в Haskell. То есть catToMap li = Map.fromList $ zip [0..] li cat1 = catToMap ["aa", "bb", "cc"] dim = Map.size cat1 Я хотел бы использовать dim статически в определении типа: type Network = Grenad…
17 июн '18 в 14:38
0 ответов

Как передать параметры в ghci с помощью TemplateHaskell?

Я использую GHC с TemplateHaskell. Кто-то сказал мне, что сам ghc использует ghci во время компиляции для реализации TemplateHaskell. Есть ли способ передать параметры в ghci, которые могут отличаться от параметров, используемых в ghc? Причина моего…
03 мар '14 в 09:41
2 ответа

У Haskell есть указатели / ссылки на участников записи?

Я могу создавать и ссылаться на относительные указатели для структурирования членов в C++, используя ::*, .*, а также ->* синтаксис вроде: char* fstab_t::*field = &fstab_t::fs_vfstype; my_fstab.*field = ... В Haskell я могу легко создавать вр…
04 фев '12 в 19:54
3 ответа

Линзы и TypeFamilies

Я столкнулся с проблемой использования Control.Lens вместе стипы данных при использовании -XTypeFamilies GHC Pragma. {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} import Control.Lens (makeLenses) class SomeClass t where data SomeDat…
1 ответ

Как получить объявление функции, используя `reify`?

Функция reify позволяет мне искать информацию о данном имени. Для функции возвращаемое значение VarI: data Info = ... | VarI Name Type (Maybe Dec) Fixity | ... Здесь я могу проверить тип функции, а также я хотел бы проверить ее объявление. Тем не ме…
21 ноя '13 в 10:12
1 ответ

Бессмысленный стиль в шаблоне Haskell

Рассмотрим следующую функцию Template Haskell: composeQ :: ExpQ -> ExpQ -> ExpQ composeQ = \x y -> [| $(x) . $(y) |] Можно ли исключить лямбда-выражение из правой части уравнения и записать composeQ используя бессмысленный стиль?
1 ответ

Конструктор данных в шаблоне haskell

Я пытаюсь создать кольцо Z/ N (как обычная арифметика, но по модулю некоторое целое число). Примером экземпляра является Z4: instance Additive.C Z4 where zero = Z4 0 (Z4 x) + (Z4 y) = Z4 $ (x + y) `mod` 4 И так далее для кольца. Я хотел бы иметь воз…
27 сен '11 в 01:00
2 ответа

Спецификация формата ToJson по умолчанию, используемого Aeson

Кто-нибудь знает, где я могу найти документацию о том, как ADT переводятся в Json ToJSON Эзона? Я использую Haskell для внутреннего приложения и пытаюсь написать JSON-декодер для другого функционального языка внешнего интерфейса, поэтому я хотел бы …
15 янв '14 в 05:50