正在浏览 happstack-lite 教程:
我们构建返回类型为 ServerPart Reponse
的函数:
homePage :: ServerPart Response
但是,在 Web 路由速成课程中,我们的函数将签名更改为以下内容:
homePage :: RouteT Sitemap (ServerPartT IO) Response
我们以前不是有ServerPart,而不是ServerPartT吗?另外,有没有更简单的方法可以切换到 Web 路由,而无需更改每个方法的类型签名?
ServerPart
被简单地定义为type ServerPart a = ServerPartT IO a
。 在 Happstack 8 中,我们可能会将其更改为 type ServerPart = ServerPartT IO
这意味着我们可以编写类似 RouteT Sitemap ServerPart Response
的类型,但在此之前,我们必须直接使用 ServerPartT
,因为类型同义词不能"部分应用"。但是,它们是相同的类型。也就是说,ServerPart Response
只是ServerPartT IO Response
的别名。
另外,有没有更简单的方法可以切换到 Web 路由,而无需更改每个方法的类型签名?
没有。我喜欢尽早为"处理程序"定义自己的类型,然后我可以更改其定义。例如,type Handler = ServerPart Response
和homePage :: Handler
,然后当我添加网络路由时,我只是重新定义处理程序type Handler = RouteT Sitemap (ServerPartT IO) Response
。
不过,您的编辑器可能具有搜索和替换功能,例如在 Vim 中:
:%s/:: ServerPart Response/:: RouteT Sitemap (ServerPartT IO) Response/g