Чтение модуля из файла в TemplateHaskell
Таким образом, большинство квази-кавычек для TemplateHaskell имеют опцию, в которой вы можете прочитать строку квази-кавычки из файла, вместо того, чтобы вводить ее в скобках, например: [quoter|... some code ...|]
,
Мне интересно, есть ли эквивалент этого для обычных кавычек TemplateHaskell? а именно [e|...|]
[t|...|]
а также [d|...|]
,
Я пишу переводчик, который преобразует код на Haskell в Elm, одновременно сохраняя мои объявления на Haskell, чтобы я мог использовать Haskell для программирования на стороне сервера и Elm для генерации Javascript. Чтобы выполнить этот перевод, я хотел бы иметь возможность читать в модуле Haskell, проходить через ADT с помощью TemplateHaskell и генерировать переведенный код в виде строки, одновременно добавляя объявления кода Haskell из модуля в код.
У меня это работает, но только когда я пишу свой код на Haskell как [d|some decs|]
, Я хотел бы иметь возможность сделать то же самое, но читать из внешнего файла.
2 ответа
haskell-src-meta - это библиотека для анализа исходного кода haskell в шаблоне haskell AST. В частности, если вы хотите прочитать строку из файла, проанализировать ее как модуль Haskell, вы используете Language.Haskell.Meta.Parse.parseHsModule
Используйте parseDecs в http://hackage.haskell.org/package/haskell-src-meta. [d| lets you capture the right variables a reliably from the place the quote is written |]
в отличие от haskell-src-meta. Может быть, это не имеет большого значения в вашем случае?