問題タブ [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を使用してGHCiで次のことを試していました(ghci -XTemplateHaskell
)
私はこれから抜け出すことを望んExp
でいました(これにはShowのインスタンスがあります)。Haskell 型に関する情報をアプリケーションに挿入して、文字列ではなく実際のデータとして利用できるようにするためにこれを行っています。
私の目標は次のとおりです。
エラー メッセージの意味がよくわかりません。「#」とは何ですか? ある場合は#
、それもあります# -> #
か* -> #
?種類が型に関連するような種類に関連するものですか (それが何であるかはわかりませんが)?
さて、GHC には種類の階層があり、`#' はボックス化されていない特別な種類の型であることがわかりました。問題ありませんが、なぜこのエラーが表示されるのでしょうか? ボックス化されていない型はジェネリックとうまく機能しないのでしょうか?
ボックス化されていない型はコンパイラによって実行される最適化であると考えるため、これが私にとって意味があるかどうかはまだ完全にはわかりません。また、Data のインスタンスが存在する場合、データ構造に含まれる可能性のあるすべての型に対して存在する必要があると考えました。
さらに調査したところ、名前が問題を引き起こしていると思いますが、dataToExpQ でそれらを回避する方法はありますか? とにかくその引数を使用する方法は?
haskell - オーバーロードされた文字列を書くときにボイラープレートを削除するにはどうすればよいですか?
次のコードがあるとします。
厳密に型指定された文字列の作成に関するボイラープレートを削除したいと思います。これを達成するために Template Haskell (または他の手段) を使用することは可能ですか?
例:
haskell - テンプレート Haskell を使用して関連付けられた型シノニムを取得する
Template Haskell は、型クラスで宣言された関連型シノニムの名前や宣言を見つけることができますか? reify
やりたいことができると思っていましたが、必要な情報がすべて提供されているようには見えません。関数型のシグネチャを取得するために機能します。
ただし、関連付けられた型シノニムをクラスに追加しても、出力は (名前の変更まで) 変更されません。
の名前がわかればF
、それに関する情報を調べることができます。
F
しかし、そもそもの名前が見つかりません。型クラスのインスタンスを追加しInstanceD
ても、定義に関する情報はありません。
うまくいかない場合reify
、アソシエート タイプのシノニムを手動でリストする以外に回避策はありますか?
この問題は、template-haskell パッケージのバージョン 2.9.0.0 を含む GHC 7.8.3 に存在します。template-haskell パッケージのバージョン 2.7.0.0 を含む GHC 7.4.2 にも存在していました。(私は GHC 7.6.* をチェックしませんでしたが、そこにも存在していたと思います。) GHC の任意のバージョンのソリューションに興味があります (「これは GHC バージョンVでのみ修正されました」を含む)。
haskell - 存在量指定子はテンプレート Haskell (makeLenses) を静かに混乱させます。なんで?
私はこのファイルを持っています:
次のエラーメッセージが表示されます。
存在量指定子を使用しようとするのはこれが初めてです。この機能の組み合わせが壊れる理由がわかりません。さらに心配なのは、makeLenses の失敗に関するエラー メッセージが表示されないのはなぜですか? 走ったrunhaskell Toy.hs
haskell - コンパイル時または実行時にランダムな文字列を生成し、プログラムの残りの部分で使用します
これを行う最良の方法は何ですか?unsafePerformIO
? テンプレート Haskell? 他の何か?どちらも使ったことがないので、詳しい使い方はわかりません。
プログラムは実行されるたびにコンパイルされるため、コンパイル時または実行時に文字列を生成するかどうかは問題ではないことに注意してください。また、コード全体の多くの場所でこの文字列を使用する必要があるため、実際には「適切な」方法でそれを行うことができず、それを IO アクションにすることはできません。IO モナドに他のコードをあまりにも多く配置する必要があります。 .
haskell - GHCi のレコードからレンズを作成するにはどうすればよいですか?
Lens
図書館でちょっと遊んでみたい。それを GHCi にロードし、適切なアンダースコアを使用してレコード データ型を作成しました。
テンプレートをFoo
使用するためのレンズを作りたいです。Template-Haskell docsmakeLenses
のセット全体を読む必要なく、これを行いたいと思います。
これを機能させるには、GHCi プロンプトでどのような呪文を入力すればよいですか?
haskell - 宣言ブラケット内で宣言スプライスが許可されないのはなぜですか? 回避策はありますか?
型宣言の単純なシュガーを定義する quasiquoter を作成しようとしています。これを行う最も簡単な方法は、正規表現を使用して入力テキスト文字列を変更することです。しかし、このコード アウトライン コードをコンパイルすると、次のようになります。
GHC は次のようなエラーを生成します。
これが許可されないのはなぜですか?宣言をスプライスする方法はありますか? 唯一の代替手段は、入力宣言全体を再解析することのようですが、これは不快です。