我正在阅读“幸福堆栈”中的网络路线教程,我不知道这是在做什么:
$(derivePathInfo ''Sitemap)
class PathInfo a where
toPathSegments :: a -> [String]
fromPathSegments :: URLParser a医生简单地说:
我们使用template-haskell为Sitemap类型派生一个PathInfo实例。
但它“存放”在哪里呢?我以为haskell没有状态,PathInfo是我们自己的东西,还是它是粒子堆栈的一部分?
如果有人能为假人解释这件事呢?谢谢。
发布于 2012-06-24 16:13:22
它生成为Sitemap类型定义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吧!。
https://stackoverflow.com/questions/11178572
复制相似问题