1

HappstackでWebルートのチュートリアルを読んでいますが、これが何をしているのかわかりません。

$(derivePathInfo ''Sitemap)

class PathInfo a where
  toPathSegments :: a -> [String]
  fromPathSegments :: URLParser a

ドキュメントは単に言う:

template-haskellを使用して、サイトマップタイプのPathInfoのインスタンスを取得します。

しかし、それはどこに「保存」されますか?haskellには状態がないと思いましたが、それはPathInfo私たち自身のものですか、それともhappstackの一部ですか?

誰かがこれを説明できたら、ダミーのために?ありがとう。

4

1 に答える 1

3

サイトマップタイプのPathInfoクラスのインスタンスを定義するコードを生成します。これは、「タイプグローバル定数」ほど「状態」ではありません。たとえば、は、のようなURLを生成するために使用されるtoPathSegments (Article (ArticleId 5))ようなものを返します。もう1つの関数は、逆演算であり、解析して戻ってきます。["Article", "5"]"/Article/5"fromPathSegments"/Article/5"Article (ArticleId 5)

このインスタンスは手動で作成できます。

instance PathInfo Sitemap where
    toPathSegments Home = ["Home"]
    toPathSegments (Article (ArticleId x)) = ["Article", show x]
    fromPathSegments = ...

テンプレートHaskellは、この定型コードの必要性を減らすためにのみ使用されます。

本の型クラスに関する章を読みたいと思うかもしれませんHaskellの初心者を対象としています。

于 2012-06-24T16:13:22.663 に答える