問題タブ [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 - Template Haskellステートメントからの出力を簡単に確認するにはどうすればよいですか?
私のモジュールには、より大きなアプリケーションの一部である次のテンプレートHaskellコードがあります。
生成されたFoldableのインスタンスは、私が最初に考えていたものとは正確に一致していないと思われますが、これを確認する方法が見つかりません。したがって、できれば、のみを使用してghci
、生成されたインスタンスを表示することは可能ですか?
次のことを試しましたが、構文エラーが発生しました。これは、DoingItWrong™を使用しているためだと思います。
web-applications - [$parseRoutes|/ Home GET|] では、どのような Haskell 構文が使用されていますか?
Yesod プロジェクトのフロント ページで次のコードを見つけました。
$、|、/、および % 記号を機能させるために、どのような言語機能が使用されて[$parseRoutes|/ Home GET|]
いますか?また、記号は何をしますか?[$hamlet|%h1 Hello World|]
haskell - TemplateHaskellとIO
副作用を使用する場合、THの機能を安全にする適切な方法はありますか?たとえば、コンパイル時にgitを呼び出して、バージョン文字列を生成する関数が必要です。
バージョンのタイプはIO文字列です。ただし、バージョンには実行時の副作用がまったくなく、コンパイル時にのみ副作用があります。unsafePerformIOを使用せずに実行時に純粋にする方法はありますか?
haskell - Lisp を知らない人のための Template Haskell チュートリアルはありますか?
私は Template Haskell を学びたかったのですが、私が見つけたすべてのチュートリアルは、あなたが Lisp を学び、Lisp マクロが何であるかを知っているか、cs 理論の専門用語 (スプライス、準引用符など) を知っていることを前提としています。 .
私は Lisp を 1 行もコード化することはできません (そして、いつかこれを行うつもりですが、今はそれを学ぶ時間がありません)。Haskell は私の最初の関数型言語であり、定期的にコーディングしたり、モナドを使用したり、アプリカティブを使用したり、型システムを理解したりできるようになるまで学習しました...しかし、あまり知りません (学習したいのですが、私は'私はそれにはあまりにも愚かです... :P) その背後にある理論的な cs について。そのため、TH のチュートリアルでよく見かける専門用語は気にしません。
プロのコンピュータ科学者としてではなく、Haskell を最初の関数型言語として学んだ日常の雑用にプログラミングを使用する人として、Haskell をコーディングする人のための TH に関するチュートリアルはありますか? 例として TH を使用するマクロとメタプログラミングの紹介でしょうか?
皆さんありがとう。:)
haskell - テンプレート Haskell: zipn
haskell.org から失われたので、archive.org からTemplate Haskell チュートリアルを読んでいたところ、ランダムな部分が取り出されたかのように破損していることに気付きました。
彼らのzipnの実装について読みたいと思っていました。彼らが持っている唯一のコードは次のとおりです。
これは私には意味がありません。チュートリアルの適切なコピーを持っている人はいますか? それとも、archive.org にあるものは何ですか?
haskell - テンプレートHaskellスプライスから警告を発する
スプライスから呼び出すことでコンパイル時エラーが発生する可能性があることは知っていますがfail
、警告のみを生成することは可能ですか?特に、でコンパイルするときにこの警告をエラーに変えられるようにしたいと思います-Werror
。
基本的に私がやろうとしていることはこれです:
コーディング中ではなくこれを使用するという考え方ですが、を使用しundefined
てコンパイルすることにより、本番コードに侵入しないようにして-Werror
ください。
performance - 定数の事前計算を強制します
Haskellで一定の宣言があります-これを事前に評価するように強制できますか?おおよそ次のようなコードが表示されています。
プロファイルを作成するときは、fst
通話に時間がかかります(1億6800万回の通話があります)。のバイナリ表現myList
は非常に小さく、たとえば、[これがCプログラムの場合]グローバルメモリにコピーできます。-O3 -optc-O3
もちろんコンパイルしています。
どうもありがとう!
カスタムタイプのLiftインスタンスの生成
sclvの回答で呼び出しに指定される式lift
は、Liftのインスタンスである必要があります。th-lift
カスタムデータ型のLiftインスタンスを生成するという名前のライブラリがあります。そのパッケージのドキュメントを参照してください。
haskell - Haskell -- 新しい 4 引数の準クォーターの使い方
準クォーター構文が変更され、4 つの引数を受け入れるようになったようです [リンク]。誰かもう使った?ありがとう。本当に単純なものを構築したいだけで、Web 上の例は現在機能しません。
前もって感謝します。
haskell - テンプレートhaskellにソース情報(行番号など)で関数をラップさせる正しい方法は何ですか?
関数から始めたとしましょう
次に、エラーメッセージを改善するために、テンプレートHaskellを介してソース情報を追加したいと思います。関数にパラメーターを追加できると想像してみましょう
次に、次のfromJust
ようなソースコードで使用できるマクロがあります。
ハック
準引用符を使用し、ソースファイル名の文字列を持ち上げることで、なんとかハッキングできました。Loc
Liftインスタンスがないようです。もっと良い方法はありますか?
ありがとう!
(使用するよりもファンクターfmap
を介して詰め込む方が良いことは知っていますが、時々ハックする必要があります。)Maybe
fromJust