問題タブ [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 投票する
1 に答える
1837 参照

haskell - Template Haskell のステージ制限に関する問題

Template Haskell の学習を始めたばかりで、スプライシングに関する単純な問題に固執しています。あるモジュールでは、タプルの N 番目の要素を返す
関数を実装しました。tupleN

メインモジュールには次のものがあります。

これは機能しているように見えますが、そうではありません。コンパイラはエラーを出力します:

タプルの説明を結合された式に入れると、コードが機能するようになります。

最初のバリアントで欠けているものは何ですか?

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

haskell - テンプレートHaskellと暗黙のパラメータ

テンプレートhaskellを使用して、暗黙的なパラメーターを使用して関数を作成したり、暗黙的なパラメーターを使用してバインディングを許可したりする方法はありますか?

つまり、テンプレートhaskellを使用して次のような署名を生成することは可能ですか?

または、次のような呼び出し:

テンプレートhaskellのAPIドキュメントで、このトピックについて役立つ適切な代数的データ型や関数を見つけることができませんでした。GHC7.4.2を使用しています。

テンプレートhaskellにこの拡張機能のネイティブサポートがない場合、コンパイル中にコードを挿入する他の可能性はありますか(テンプレートhaskell内の一般的な「コードインジェクション関数」のようなものですか?)。

編集:私はコメントからの提案を試しました、これは何が起こるかです:

これは機能しますが:

サポートされていないようです。

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

haskell - テンプレートHaskell引用でのスタンドアロン派生宣言

テンプレートHaskellがスタンドアロンの派生宣言を引用で無視するのはなぜですか?

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

c - 実行時に TemplateHaskell で生成されたコードを生成して実行することは可能ですか?

実行時に TemplateHaskell で生成されたコードを生成して実行することは可能ですか?

C を使用すると、実行時に次のことができます。

  • 関数のソースコードを作成し、
  • gcc を呼び出して .so (Linux) にコンパイルします (または llvm などを使用します)。
  • .so をロードし、
  • 関数を呼び出します。

Template Haskell でも同様のことが可能ですか?

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

compilation - このGADTテンプレートのHaskellモジュールでGHCが終了しないのはなぜですか?

テンプレート Haskell を使用した GADT の生成に問題があります。問題は、コードを完全にコンパイルできないことです。ファイルのロード時に GHCI が終了せず、ghc プロセスが大量のメモリと CPU を使用します (2.4GB、50~70%)。

私はそれがまだ起こる最小限の例を作ろうとしました。[| |]オックスフォード表記 ( ) を使用するか、TH データ型を手動で適用して関数を作成するかは問題ではありません。次の単純なモジュールを検討してください。

Haskell Platform for x64 の OSX Mountain Lion で GHC 7.4.2 を使用しています。

なぜこれが起こるのか誰にも分かりますか?多分私はいくつかのコードを間違って使用していますか?

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

haskell - Haskell quasiquoter での任意の式のスプライシング

Why It's Nice to be Quoted を読んで、セクション 3 に準引用符で変数識別子をスプライシングする例があります。

substへの再帰呼び出しが の外で行われる理由がわかりました。これは、セクション 3.2[:lam| ... |]の関数が変数名から を構築するためです。antiVarETH.varE

私の質問は、変数名だけでなく、任意の式のスプライスをサポートするためにどれだけの作業が必要になるかということです?

例えば:

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

haskell - 関数名を出力する関数

Haskellで独自の関数名を返す関数を実装することは可能ですか?

可能なタイプは(a -> b) -> String.

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

haskell - シングルトンデータ型を含むこの Template Haskell コードを書く良い(r)方法はありますか?

私は Template Haskell を使い始めたばかりで (ようやくユースケースを手に入れました!)、今は認知的に立ち往生しています。

私がやろうとしているのは、フォームのシングルトンデータ型宣言を生成することです

名前からV始めます (できれば大文字で始めてください!)。明確にするために、私はdeclareSingletonスプライスString -> DecsQ

と同等です


次のコードが機能し、必要なことを実行していますが、あまり満足していません。

次のようなものが機能することを望んでいました。

$s$v$(conT v)vのさまざまな組み合わせを試してみましたが、役に立ちませんでした (ただし、すべてを網羅しているわけではありません!) 'v

ここで明らかな何かが欠けていますか? 本質的な方法で型名とコンストラクター名を混同してdeclareSingletonいませんか?

もしそうなら、どのように; そうでない場合、なぜですか?

(余談: Template Haskell API は急速に変化します。私はそれを喜んでいます。この単純な型に、関連付けられた型ファミリを持つマルチパラメーター型クラスを最終的に実装してもらいたいのですが、API が現在経験している変化はそうではありません。チュートリアルを簡単に検索できます! 6.12.1 または 7.2 での TH の実装方法 (既存のチュートリアルのほとんどが作成されたとき) と、現在の動作方法には大きな違いがあります...)

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

haskell - 代数データ型の TH Lift インスタンスの定義

次のような複数のコンストラクターを持つ代数データ型があるとします。

Liftインスタンスを効果的に作成するにはどうすればよいですか? これを行う最も簡単な方法は次のとおりです。

ただし、これは非常に冗長です。もちろん、さまざまな動物を のように直接抽象化することはできませんがlift x = [| x |]、概念的には達成したいことと似ています。データ コンストラクターごとに同じ行を再度書き込む必要がないように、TH でこれを行う方法はありますか?

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

haskell - 引用のためのテンプレート Haskell 関数はありますか?

私は Template Haskell で遊んでいます。レコードのデフォルトの初期化子を作成できる準クォーターを作成したい、つまり次のようなもの

関数を作成する必要があります

基本的にはデータ宣言と同じ構文で、デフォルト値で拡張されています。現在recordはカスタムの QuasiQuoter ですが、内部には自分自身を解析したくない式と型があります。理想的には、中括弧内のブロックをステートメントに分割し、 and を探すだけで済み=ます::

[e| ...|]そこで、 orで引用するのと同じことを効果的に行う関数を探してい[t| ...|]ます。Hoogle で関数を検索しましたが、何String -> ExpQString -> Q Exp見つかりませんでした。

私が何を探しているのかよくわからなかった場合:私は QuasiQuoters について知っています。私が述べたように:record QuasiQuoter です。準クォーターに渡される文字列には、式 ( などNode 7 (Node 8 Nil Nil) Nil) とタイプ (Trueまたはなど) が含まれていMaybe (Either A B)ます。私はこれらを自分で解析できますが、文字列を のような引用符に渡したのと同じように、それを実行する関数があることを願っています[e|...|]

だから:式を文字列として、またはタイプを文字列としてフィードでき、適切なExpまたはTypeオブジェクトを返す関数を探しています。コンテキストに基づいて式または型を評価する必要があるため(引用と同じように)、Qモナドに存在する必要があると思います。