在 Web 路由中派生 PathInfo 类



我正在阅读Happstack中的Web路由教程,我不知道这是在做什么:

$(derivePathInfo ''Sitemap)
class PathInfo a where
  toPathSegments :: a -> [String]
  fromPathSegments :: URLParser a

文档只是说:

我们使用 template-haskell 来派生站点地图类型的 PathInfo 实例。

但是它在哪里"存储"它?我以为Haskell没有状态,PathInfo是我们自己的事情,还是happstack的一部分?

如果有人可以解释这一点,傻瓜?谢谢。

它生成为站点地图类型定义 PathInfo 类实例的代码。这不是"状态",而是"类型全局常量"。例如,toPathSegments (Article (ArticleId 5))将返回类似 ["Article", "5"] 的内容,而 又将用于生成类似 "/Article/5" 的 URL。另一个函数,fromPathSegments,是反向操作,将"/Article/5"解析回Article (ArticleId 5)

您可以手动编写此实例:

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

模板Haskell仅用于减少对此样板代码的需求。

你可能想阅读《为你学习一个Haskell的伟大善!》一书中关于类型类的章节,这本书是针对Haskell初学者的。

相关内容

  • 没有找到相关文章

最新更新