我们构建返回类型为ServerPart Reponse
的函数:
homePage :: ServerPart Response
但是,在web-routes crash course中,我们的函数将签名更改为以下内容:
homePage :: RouteT Sitemap (ServerPartT IO) Response
我们之前没有ServerPart,而不是ServerPartT? 此外,是否有更简单的方法切换到Web路由,而不更改每个方法的类型签名?
答案 0 :(得分:3)
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