問題タブ [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.

0 投票する
3 に答える
976 参照

haskell - 適用可能なファンクターにブラケット構文糖衣を使用することは可能ですか?

McBrideとPatersonの「エフェクトを使用したアプリケーションプログラミング」では、純粋関数を持ち上げるための素敵な構文糖衣を紹介しています。

にとって

どこかでli f w x y z ilorを使用している人を思い出します。これは、既存の言語機能ととの狡猾な定義をil f v w x y z li使用して定義できるためかもしれないと思いました。liil

私はこれについての言及を論文以外に見つけることができず、それを仮定して[||]すぐにghcに現れる可能性は低いと仮定して、実装することは可能liですilか?私は彼らにとって賢明なタイプを考えることができないので、私はテンプレートHaskellまたは同様のものが必要だと思いますが、これを達成するのに十分な知識はほとんどありません。[af| f x y ]大丈夫ですが、試してみる前にそれが可能かどうかはわかりません。可能であれば、確かに助けが必要です。

0 投票する
1 に答える
417 参照

haskell - Haskellで外部ファイルからの標準準引用符を処理する

コンパイル時の AST 操作のために、外部の Haskell ソース ファイルを読みたかったのです。どうやってやるの?以下のようなことを試してみましたが、「TH.hs:15:12: Declaration splices are not allowed within宣言ブラケット」というエラーメッセージが表示されてコンパイルできませんでした。

haskell-src-exts パッケージも試してみましたが、このパッケージは解析のみのようで、識別子と型チェックを解決しません。だから私はTHがより良い選択だと思った。

0 投票する
1 に答える
234 参照

haskell - テンプレート Haskell コンパイル エラー

次のコードを検討してください。

これは正常にコンパイルされ、期待どおりに「Hello1」が出力されます。

ただし、次の行 (GHC 7.4.1) を追加すると、コンパイル エラーが発生します。

与えられたエラーは次のとおりです。

f2行を追加するとコンパイルエラーになるのはなぜですか?

注: Template Haskell のパーツはここではばかげているように見えるかもしれませんが、タプルで機能するより複雑な Template Haskell を単純化したものです。まだエラーが発生している、作成できる最も単純な例を投稿しました。この場合、テンプレート Haskell を削除すると問題が解決することはわかっていますが、それは私の実際のコードではオプションではありません。

編集:

さらに、以下はコンパイルに失敗します。なぜそうなのか:

0 投票する
1 に答える
95 参照

haskell - 異なるパラメータで呼び出したときのテンプレート Haskell コンパイル エラー

以下が(GHC 7.4.2で)コンパイルに失敗するのはなぜですか?

以下は正常にコンパイルされることに注意してください。

前者をコンパイルするために使用できる言語拡張機能はありますか?

この例では Template Haskell がばかげているように見えますが、これはより複雑な問題の単純化されたバージョンであり、任意のサイズのタプルを処理するには Template Haskell が必要です。

0 投票する
1 に答える
380 参照

haskell - テンプレートHaskell拡張(-ddump-splicesを使用)に依存して、常に有効なコードを生成できますか?

私はHaskellモジュール内のすべてのTHスプライスを拡張する小さなユーティリティを作成しました。これにより、THが利用できない場合でもhaskellモジュールを使用できます。これを実現するために-ddump-splices、モジュールのコンパイル中にオプションをGHCに渡し、結果のコードをキャプチャしてから、モジュール内のTH宣言をキャプチャされたコードに置き換えます。

ただし、-ddump-splicesが常にコンパイル可能なコードを生成するとは限らないようです。具体的には、レイアウトに中括弧を使用しているようですが、正しい場所にセミコロンを追加していません。

これが私のテストファイルの例です-

ここでは、開閉ブレースが生成されましたが、2つのケースの選択肢の間に必要なセミコロンは生成されませんでした。これにより、コンパイル時に次のエラーが発生します-

0 投票する
5 に答える
216 参照

haskell - 有限であるが任意の数の異種要素を処理する関数

私はゲーム理論の学習を研究するために図書館で働いています。この設定では、Nエージェントがまとめられ、環境と対話します。各エージェントは、相互作用のモデルを導き出します。1つのエージェントのモデルは、そのN-1対戦相手によって異なります。1エージェントとエージェントのモデルを決定するコードを作成し2、それを一般化しようとしています。これが私が持っているコードの一部です:

私は、systemToMockupN有限数のエージェントに対応できる関数定義を求めています。

エージェントは異種であるため、リストを直接使用することはできません。事前にサイズがわからないのでタプルは使えません。curryN、などを使用してみuncurryNましたが、タプルのすべての要素に対して1つの操作を実行できませんでした。同様の方法で可変個引数関数を作成しようとしましたprintfが、成功しませんでした。

テンプレートhaskellを使用できることは知っていますが、見落としているより良い解決策があるかどうか疑問に思っています。有限であるが任意の数の異種要素を処理するコードへのポインタは大歓迎です。

0 投票する
1 に答える
202 参照

generics - Haskell クラスの一部ではないボイラープレートを避ける

人工生命実験のフレームワークを開発しています。各種が Agent クラスのインスタンスである限り、フレームワークは複数の種をサポートできます。各エージェントを AgentBox にラップして、基になる型を知らなくても読み書き、使用できるようにします。

これはうまく機能しますが、フレームワークのユーザーが作成しなければならない小さなボイラープレート関数が 1 つあります。これを回避する方法があるかどうか知りたいです。関数の型シグネチャで型変数が言及されていないため、Agent クラスでその関数の既定の実装を提供することはできません。私はボイラープレートで暮らすことができますが、もっと良い方法があるかどうか知りたいです.

これは、私が話していることの最小限の実例です。最後の getRock 関数は、ユーザーに強制的に記述させたくないものです。クラス Agent のすべてのインスタンスは、エージェントを読み取ってボックスにラップする関数を提供する必要があり、実装は常に getRock とまったく同じように見えます。

0 投票する
3 に答える
599 参照

haskell - GHCステージ制限(テンプレートHaskell)

次のコードで「GHCステージ制限」が発生する理由がわかりませんでした。

(コードが何も役に立たない場合でも心配しないでください-明確にするために難読化された最小限の例が抽出されています)。

スプライスされたコードから関数を呼び出すことはありません。なぜステージ制限?

EDIT1:さらに簡単なコード例を提供するために編集

0 投票する
1 に答える
676 参照

haskell - シェイクスピアのテキストと外部ファイルを使用する

以下の例を変換して、埋め込まれた遅延テキストの準引用符の代わりに外部ファイルを使用するにはどうすればよいですか?

これはyesod オンラインブックからのものです。

0 投票する
2 に答える
350 参照

haskell - Can Template Haskell generate multi-param typeclass instances?

The latest (2.8.0.0) definition for the Dec has the following instance constructor:

Seems that only one type can be instantiated. Is there a way to work around this?