0

通过happstack-lite 教程

我们构建具有返回类型的函数ServerPart Reponse

homePage :: ServerPart Response

但是,在web-routes crash course 中,我们的函数将签名更改为以下内容:

homePage :: RouteT Sitemap (ServerPartT IO) Response

我们之前不是有ServerPart,而不是ServerPartT吗?此外,是否有更简单的方法可以切换到网络路由,而无需更改每个方法的类型签名?

4

1 回答 1

3

ServerPart被简单地定义为type ServerPart a = ServerPartT IO a。在 Happstack 8 中,我们可能会将其更改为type ServerPart = ServerPartT IO这意味着我们可以编写类似 的类型RouteT Sitemap ServerPart Response,但在那之前,我们必须ServerPartT直接使用,因为类型同义词不能“部分应用”。但是,它们相同的类型。也就是说,ServerPart Response只是ServerPartT IO Response.

此外,是否有更简单的方法可以切换到网络路由,而无需更改每个方法的类型签名?

并不真地。我喜欢在早期为“处理程序”定义我自己的类型,然后我可以更改它的定义。例如,type Handler = ServerPart Responseand homePage :: Handler,然后当我添加 web-routes 时,我只需重新定义 Handler type Handler = RouteT Sitemap (ServerPartT IO) Response

您的编辑器可能具有搜索和替换功能,例如在 Vim 中:

:%s/:: ServerPart Response/:: RouteT Sitemap (ServerPartT IO) Response/g
于 2012-06-24T16:25:47.697 回答