問題タブ [template-haskell]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - TemplateHaskell の名前付き変数のリテラル値を取得する方法
TemplateHaskellに がName
あり、変数がリテラルとして宣言されている場合、その変数の値を知りたい場合、これを行うことはできますか?
haskell - テンプレートHaskellのポイントフリースタイル
次のテンプレートHaskell関数を考えてみましょう。
方程式の右辺からラムダ式を削除し、composeQ
ポイントフリースタイルを使用して書き込むことは可能ですか?
haskell - 文字列を出力して実行する
私は自分が次のような多くのコードを書いていることに気づきます
問題は、出力されたメッセージが実際に実行されたコードと同期しなくなる可能性があることです。明らかな解決策は、このコードを自動生成することです。
これを行う 1 つの方法は、すべてのテキストをファイルに入れ、そのファイルを読み取り、そこから Haskell ソース コードを生成する小さなプログラムを作成することです。しかし、もう 1 つの方法は Template Haskell を使用することです。
String
を受け取り、そこから上記のコードを生成する関数を作成する方法を知っている人はいますか? かなり簡単だと思いますが、TH は十分に文書化されていません。
haskell - この Template Haskell が機能するのはなぜですか?
次のコードを検討してください。
さて、私が知る限り、これは実際には機能しないはずです。オックスフォード ブラケットの内側はs
対象外です。それでも、上記は明らかに完全に機能します。
この例を少し変更すると、ひどく壊れます。
前と同じように、スコープ外の変数があります。そして今度は壊れる。しかし、スコープ外の変数については文句を言いません。代わりに、インスタンスがない文書化されていないクラスについて泣き言を言います。
いったい何が起こっているのか知っている人はいますか?
haskell - Langage.Haskell.TH.report はどのように機能しますか?
残念ながら、多くの Template Haskell 関数にはまったくドキュメントがありません。そのような機能の 1 つがreport
. Bool
とを取りString
、指定された文字列をエラー メッセージとしてコンパイル エラーを生成します。一体何のためにあるのか、誰にも手がかりがありBool
ますか? 私が知る限り、どちらの値もまったく同じことを行います...
haskell - ローマ人、ルビー、ハスケル
Romans、ルビー、および Dに動機付けられて、Haskell で同じことができるかどうかを確認したかったのです。
と:
まず、私は Template Haskell を初めて使用するので、それが正しいかどうかを知りたいです。実際の計算はコンパイル時に行われますよね?
次に、構文を改善するにはどうすればよいですか?
代わりに、の$(roman "CCLXXXI")
ようなものroman "CCLXXXI"
、またはそれ以上のものが欲しいです。これまでのところ、構文を改善できませんでした。
haskell - GHCステージ制限を回避する方法は?
クラスインスタンスに格納されているデータ型フィールドの説明に出力が依存するコードジェネレーターを作成しています。ただし、THで生成された引数を使用して関数を実行する方法が見つかりません。
別のモジュールがGeneratorを使用しようとしたとき
エラーが表示されます
編集:
聞いてみると、THで重要なことを把握していなかったからといって問題が発生し、一部の機能を他のモジュールに移すことで解決できると思いました。
質問の例のように事前計算されたデータを生成することが不可能な場合は、THの理論上の制限について詳しく知りたいと思います。
haskell - Haskellでのコンパイル中にさまざまな場所にコードを含めるにはどうすればよいですか?
準引用符を使用すると、コンパイル中にASTコードを生成できますが、生成されたコードは、準引用符が書き込まれた場所に挿入されます。コンパイル時に生成されたコードを他の場所に挿入することは可能ですか?たとえば、QQが書かれたものとは異なる特定のモジュールファイルでは?ハードコードされたモジュール構造に依存しますが、それは問題ありません。
それがQQで不可能であるが、誰かがそれを達成するための別の方法を知っているなら、私は提案を受け入れます。
haskell - その中の関数名を取得する
method1
次のような関数がたくさんありmethod2
ますmethod3
。それらすべてに対して、 、、 のHUnit
ようなテスト関数があります。testMethod1
testMethod2
testMethod3
エラーメッセージのプレフィックスとして関数の名前を重複してコピーすることを避け、次のように呼びたいと思います。
どのようにそれを達成できますか(「魔法の」トリックは大歓迎です)?
実際の問題は、関数名をその定義内でどのように使用できるかということです。
更新します。
元の質問からは実際には明らかではありませんが、そのような状況にも対処したいのです。
最後に、次のように書きたいと思います。
haskell - テンプレートhaskellスコープの外でタイムコードの書き換えをコンパイルしますか?
テンプレートhaskell引用符の外部からコンパイル時にhaskellコードを書き換える関数を作成することは可能ですか?
例えば:
コンパイル時に、gは次のように変換されます。
「微分」関数に「f」のASTを渡して、コンパイルする前に書き直してもらいたいのですが。私の知る限り、テンプレートhaskellでこれを行うには、関数の完全な構文、つまり「g=微分sin」を渡さなければなりません。
ありがとうございました