問題タブ [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-platform - Haskell の有向グラフ
私は今Haskellで苦労しています。命令型言語や OOP の経験もありますが、Haskell はそれらとは異なるようです。私は Haskell を過小評価しており、新しい言語を学ぶことは私にとって問題ではないと考えています。しかし、多くの新しい概念 (型クラス、ファンクター、アプリカティブ、モノイド、モナド... このLearnyouahaskellの 14 章をすべて読んだ) で 1 週間を過ごした後、それらが私をとても混乱させ、書き始め方がわからないことに気付きました。 Haskell を使ったプログラム。一部の専門家は、Haskell を習得するには数か月かかると言っています。しかし、大きなプロジェクトを完了するのに 2 週間しかありません。
1) それで、私の最初の質問は Haskell を学ぶ方法です
2) Applicative functor を使用する必要があるとき、およびモナドを使用する必要があるときは?
3)私のプロジェクトは、多くのプレゼンテーションに基づいて有向グラフを処理することです:
- 隣接行列
- 二分探索木
私は Haskell の初心者なので、Haskell で有向グラフをどこから始めればよいかわかりませんか? 何か提案はありますか?
haskell - Haskell: ここで Lisp のようなマクロを実際に使用できると思います
私の小さなサッカー ゲームの AI コードは、基本的に次のように機能します。ピッチの現在の状況を説明する事実を導き出す関数があります。
... 事実は次のようになります。
...そして、一様に次のように見えるルールがあります。
そして、すべてのルールを実行し、結果のメッセージを収集するルール エンジンがあります。
これまでのところ問題なく、非常にうまく機能しています。このアプローチでは、すべてのファクトに対して次のような「アクセサ」関数が必要です。
このアプローチは、多くの見苦しいボイラープレート コードにつながります。私の質問: これらのアクセサー関数を手動で作成する必要をなくすエレガントなソリューションはありますか?
optimization - ループと再帰の展開
これはSHA-1標準からのものです。haskellでは、これを行うための再帰関数を簡単に作成しますが、より効率的にするために、再帰全体を展開したいと思います。インライン化は機能しません。これは、コードの指数関数的な爆発を引き起こす可能性があるためです。私が念頭に置いているのは、THを記述して、までの定数line、などを生成するW_0
ことW_1
です。W_2
W_79
別の例は、ケースのループ展開です。
再帰的な関数呼び出しを避けるために、このループも展開したいと思います(そして、ghcがこの種の最適化を実行するとは思わない)。
それで、私が行ってこのためのTHを書く前に、これを行うためのより良い方法があるかどうか尋ねたかったのです。ここでは、最適化が非常に重要であると言っても過言ではありません。
haskell - HamletSettings を Hamlet の quasiquote に適用するにはどうすればよいですか?
背景: 私はハムレットが WAI を使って Yesod を使わずにどのように動作するかを研究しています。私は Template Haskell を理解していませんが、それに飛び込む前に、このタスクに対する既知の/迅速な解決策があるかどうか疑問に思っています。
詳細: Hamlet quasiquote のコンテキストでNewlineStyleを変更する方法を知りたいです。
探索: このような関数呼び出しと関係があると思います
...しかし、準引用符のコンテキストで、これを行うコードの書き方がわかりません。
これが私が変更したい作業コードです:
支援、侮辱、またはその他のコメントを事前に感謝します。
haskell - Template Haskell がコンパイル中に任意の IO 操作を許可するのはなぜですか?
TH について学ぼうとしているときIO
に、コンパイル中に任意のアクションが許可されていることがわかりました (テンプレート Haskell の何が悪いのか?を参照してください)。これは私にはかなり危険に思えます。何故ですか?一部のタスクで本当に必要ですか?それとも、「すべての不純なものをIO
罪のビンに投げ込む」という、その設計の単純化にすぎないのでしょうか?
更新:恣意的な操作を禁止する TH の安全なサブセットを作成する取り組みがあるかどうかも興味がありますIO
。
haskell - Template Haskell を使用して関数の本体を取得するには?
現在、すべての解析、型チェックなどの問題に対処する必要なく、Haskell サブセットから翻訳を行おうとしています。ドキュメントは、関数の本体 (すべての定義) をその名前で取得する関数を理解するのに役立ちませんでした。
この呼び出しのコンテキストは次のようになります
誰か知ってる?
- TH に適切で最新のドキュメントがあるかどうか (Hackage のリファレンスではない) または
- getBody の作り方は?
haskell - Derive と Template Haskell などを使用して、Vinyl レコード タイプの Binary インスタンスを派生させる方法はありますか
タイプレベルの種類を使用して、フィールドレベルのポリモーフィズムと自動的に提供されるレンズを備えたレコード構造を作成するVinyl パッケージを試しています。これらの機能はどちらも私のプロジェクトにとって非常に便利です。前者は名前の衝突なしに互いのサブタイプであるレコード構造を許可し、後者はネストされた構造の更新を劇的に簡素化するからです。
問題は、結果の構造をシリアライズすることです。通常は Data.DeriveTH を使用して自動的に Binary インスタンスを派生させますが、これらの構造に対応できないようです。次のコード
GHCIでこのエラーが発生します
これは、Derive Convert モジュールの次のコードに関連しているようです。
Template Haskell の読み方がよくわからないので、ここではあまり進歩できません。私はデータ型ではなく型シノニムを派生させており、それがそれを壊している可能性があることに気づきました。
このさらに鈍いエラーにつながります:
Convert.hs を見ると、
GHC 7.6 が、Derive テンプレート Haskell が考慮していない新しい言語構造を導入し、非網羅的なパターンにつながっていることが問題になっていると思います。
だから私の質問は、派生に追加するか、ビニールレコードタイプから独自の派生を書くか、または同様のものを作成することによって、前進する方法はありますか? ヴァイナルの利点と、すべての連載を手書きすることとをトレードオフしなければならなかったとしたら、それは残念なことです。
haskell - テンプレートメタプログラミングのHaskellバリアント
Haskellは初めてです。Haskellの大前提は、関数が常に同じ値を返すということです。たとえば、テンプレートメタプログラミングを使用してC ++で実行できるように、コンパイル時に定数のフィボナッチ値を計算する方法があると思いますが、それを行う方法がわかりません。方法はありますか?
haskell-platform - Haskell型の式
Haskell型の式について2つの質問があります。
質問1 -
タイプNODEを宣言したい
タイプATTRには、次の3つのサブタイプが含まれます。
ソースブール
ターゲットブール
GhostInt
ただし、上記の宣言は、ATTRに次のようなサブタイプの組み合わせを含めることができるという要件を満たしていません。
- ATTRには、ソースブールとターゲットブールを同時に含めることができます
- ATTRには、Source Bool、Target Bool、GhostIntを同時に含めることができます
- ATTRは空にすることもできます(何も含まれていません)
質問2 -
タイプGRAPHを宣言したいと思います。このタイプでは、グラフに1つ以上のステートメント(STMTS)を含めることができ、グラフが空の場合はステートメントを含めることができません。だから私は次のように宣言します:
しかし、繰り返しになりますが、再帰データ型STMTSは無限に繰り返されます。
haskell-platform - データ型 Haskell エラー
次のようにいくつかのデータ型を宣言します。
ここで、データ型を返す関数をいくつか書きます。
関数 funcTX_TY は、TX の値を 4 と比較して TX_OR_TY の型を返します。大きい場合は TX を返し、小さい場合は TY を返します。しかし、コンパイル時に、予想されるタイプTX_OR_TYとTXを一致させることができなかったことが通知されます。どうすれば修正できますか?