我们构建具有返回类型的函数ServerPart Reponse
:
homePage :: ServerPart Response
但是,在web-routes crash course 中,我们的函数将签名更改为以下内容:
homePage :: RouteT Sitemap (ServerPartT IO) Response
我们之前不是有ServerPart,而不是ServerPartT吗?此外,是否有更简单的方法可以切换到网络路由,而无需更改每个方法的类型签名?
我们构建具有返回类型的函数ServerPart Reponse
:
homePage :: ServerPart Response
但是,在web-routes crash course 中,我们的函数将签名更改为以下内容:
homePage :: RouteT Sitemap (ServerPartT IO) Response
我们之前不是有ServerPart,而不是ServerPartT吗?此外,是否有更简单的方法可以切换到网络路由,而无需更改每个方法的类型签名?
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 Response
and homePage :: Handler
,然后当我添加 web-routes 时,我只需重新定义 Handler type Handler = RouteT Sitemap (ServerPartT IO) Response
。
您的编辑器可能具有搜索和替换功能,例如在 Vim 中:
:%s/:: ServerPart Response/:: RouteT Sitemap (ServerPartT IO) Response/g