一个简单的yesod服务器代码,为我写的所有GET请求都有一个处理程序:
{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses,
TemplateHaskell, OverloadedStrings #-}
import Yesod
data Links = Links
mkYesod "Links" [parseRoutes|
/* HomeR GET
|]
instance Yesod Links
getHomeR = defaultLayout [whamlet|Go to page 1!|]
main = warpDebug 3000 Links
它引发了一个神秘的错误,
Exception when trying to run compile-time code:
Invalid type: ""
Code: mkYesod
"Links"
([Yesod.Routes.TH.Types.ResourceLeaf
(Yesod.Routes.TH.Types.Resource
"HomeR"
[]
(Yesod.Routes.TH.Types.Methods (Data.Maybe.Just []) ["GET"])
[]
GHC.Types.True)])
我从博客中复制了工作代码并删除了除一条路线以外的所有路径,将通配符*
添加到单个路径路径中[parseRoutes| /* HomeR GET \]
,使其成为所有网址的处理程序。
并且,代码不再有效。
答案 0 :(得分:2)
你必须在PathMultiPiece
之后添加一个*
实例的类型:
/*Texts HomeR GET
(Texts
,它只是[Text]
的同义词,是一个实例,因为Text
是PathPiece
的一个实例,当然你必须将其添加为你的处理程序的参数:
getHomeR :: [Text] -> Handler Html
getHomeR parts = defaultLayout [whamlet|Go to page 1!|]
中详细了解相关信息