2017-01-03 1 views
1

有効なハスケルコードを含むString(またはTextなど)があります。テンプレートHaskellで[Dec]に変換する方法はありますか?Template Haskellで生のソースコードを出力することは可能ですか?

ASTがGHCに直接行かないので、印刷してから解析する段階になると確信しています。

これはTHに異なる "バックエンド"を許可するので、これは素晴らしいことです。たとえば、THよりも多くのHaskell構文をサポートするASTをhaskell-src-extsから使用できます。

+1

なぜASTがGHCに直接行かないと思いますか?それは正直に私を驚かせるでしょう。 – melpomene

+0

タイトルが質問と一致していないようです。私はあなたが '-ddump-splices'を探していると仮定しました。 – jberryman

+0

@jberryman私は同意します。より良い提案をしてください。 –

答えて

6

ASTが直接GHCには行かないので、とにかく印刷してから解析する段階になるでしょう。

あなたはそれをどう思いますか?そうでない場合、TH ASTはGHCの内部ASTに直接変換されます。そのプロセスのどの時点でもテキストに変換されることはありません。 (それがなかった場合は、それはかなり奇妙なことでしょう。)

テンプレートHaskellはt、基本的に様々なe後ろパーサを露出させ、式、種類、および宣言にHaskellソースを解析する方法を公開している場合でも、それは多少いいだろう、テンプレートHaskellに組み込まれているdのクォーダーです。残念ながら、そうではありません。私は現在、それを変更する計画はないと思います。

現在のところ、haskell-src-extsを経由する必要があります。 で、haskell-src-extsのパーサとGHCの違いはありますが、これは理想的ではありません。痛みを軽減するために、とtemplate-haskellを橋渡しするa package called haskell-src-metaがあります。

parseDecsの機能はLanguage.Haskell.Meta.Parseで、種類はString -> Either String [Dec]で、これはあなたが探している機能です。

+0

うーん、これはほぼ十分ですが、THのようなものは不可解なことに、 'haskell-src-exts'の間は可視タイプのアプリケーションをサポートしていません。コメント/ドキュメントはもちろんですが。 –

+0

[なぜテンプレートHaskellがパーサをクォータのために公開しないのかについて](http://stackoverflow.com/a/40985623/3072788)。 – Alec

+0

@Alecおそらく[ネイティブメタプログラミングの提案](https://ghc.haskell.org/trac/ghc/wiki/NativeMetaprogramming)の方がはるかに簡単でしょうか? –

関連する問題