Yesod Web フレームワークを詳しく調べたいのですが、その方法がよくわかりません。GHCi で各メソッドを個別にインタラクティブにテストできれば完璧です。だから私はそれが内部でどのように機能するかを本当に知りたいです。Yesod やその他のライブラリの使い方だけではありません。これは合理的な方法ですか?Haskell で新しいライブラリを学習する際に他の人にどのように対処しますか?
3 に答える
Yesod は、テンプレートについても、テンプレート Haskell、準引用符、およびコンパイルに大きく依存しています。コマンドラインである程度テストすることもできますが、これは非常に不便です。しかし、Yesod Bookは非常に包括的で、初心者に優しい入門書です。
Web フレームワークは、多くのコンテキストを必要とするため、メソッドごとにテストするのが最も簡単なことではありません。それらは主にネットワーク通信を扱っているため、常に何らかのモナド (少なくとも IO) で実行する必要があります。今日最も人気のある 3 つの Haskell Web フレームワークはすべて、より便利にするために独自のモナドを定義しています。通常、これには、ヘッダー、解析されたクエリ文字列、投稿パラメーターなどを追跡するために、内部にかなりの状態が含まれます。これは、少なくとも Web サーバー API の一部をテストする必要があることを意味します。完全な HTTP リクエストおよび/または Web サーバーモナドによるリクエストから派生した必要な基礎データを持っています。
上記のすべてを簡単に実行できるようにする API を作成することは、確かに可能です。これの Yesod のバージョンは wai-test パッケージにあります。Snap のバージョンは、snap-core の Snap.Test モジュールにあります。
Yesod は、(Lisp マクロのような) Haskell のメタプログラミング ライブラリである Template Haskell (TH) にも大きく依存しています。3 つの Web フレームワークはすべて TH を使用していますが、Yesod は独自の quasiquoted DSL で TH をより頻繁に使用しています。TH には 2 つのパスが必要です。最初に TH コードをコンパイルする必要があります。次にそのコードが実行され、新しいコードが生成されます。次に、新しいコードが他のすべてのものと一緒にプログラムにコンパイルされます。この 2 パス システムは、一般に、TH を必要とするコードを GHCi で手動で操作するのは、TH を使用しないコードよりも難しいことを意味します。
通常、私の Web アプリケーションでは、GHCi をゼロから実行するだけではありません。私は通常、自分が書いた別のコード ファイルを読み込んでいます。Template Haskell の部分がファイルで指定されており、GHCi の起動時にコードが生成されるため、テンプレート Haskell の問題を回避できます。それ以降は、生成された関数で遊ぶことができます。
ghci で遊ぶことは、ライブラリを学ぶ良い方法ですが、yesod のようなフレームワークの場合は、まず構造に慣れる必要があります。
最初にチュートリアルに従うことをお勧めします。基本的なコード構造に慣れたら、ルート、テンプレート、永続などの関連ライブラリに集中できます。そして、これらのライブラリーを学ぶとき、ghci はあなたの味方になるでしょう。