63 lines
2.0 KiB
Haskell
63 lines
2.0 KiB
Haskell
{-# LANGUAGE TemplateHaskell #-}
|
|
{-# LANGUAGE FlexibleInstances #-}
|
|
{-# LANGUAGE QuasiQuotes #-}
|
|
|
|
import Yesod
|
|
import Yesod.Rep
|
|
import Data.Object.Html
|
|
|
|
data MyYesod = MyYesod
|
|
|
|
instance Show (Handler MyYesod RepChooser) where show _ = "Another handler"
|
|
|
|
getStatic :: Verb -> [String] -> Handler MyYesod HtmlObject
|
|
getStatic v p = return $ toHtmlObject ["getStatic", show v, show p]
|
|
pageIndex :: Handler MyYesod RepChooser
|
|
pageIndex = return $ chooseRep $ toHtmlObject ["pageIndex"]
|
|
pageAdd :: Handler MyYesod RepChooser
|
|
pageAdd = return $ chooseRep $ toHtmlObject ["pageAdd"]
|
|
pageDetail :: String -> Handler MyYesod RepChooser
|
|
pageDetail s = return $ chooseRep $ toHtmlObject ["pageDetail", s]
|
|
pageDelete :: String -> Handler MyYesod RepChooser
|
|
pageDelete s = return $ chooseRep $ toHtmlObject ["pageDelete", s]
|
|
pageUpdate :: String -> Handler MyYesod RepChooser
|
|
pageUpdate s = return $ chooseRep $ toHtmlObject ["pageUpdate", s]
|
|
userInfo :: Int -> Handler MyYesod RepChooser
|
|
userInfo i = return $ chooseRep $ toHtmlObject ["userInfo", show i]
|
|
|
|
instance Show (Verb -> Handler MyYesod RepChooser) where
|
|
show _ = "verb -> handler"
|
|
instance Show (Resource -> Verb -> Handler MyYesod RepChooser) where
|
|
show _ = "resource -> verb -> handler"
|
|
handler :: Resource -> Verb -> Handler MyYesod RepChooser
|
|
handler = [$resources|
|
|
/static/*filepath/: getStatic
|
|
/page/:
|
|
Get: pageIndex
|
|
Put: pageAdd
|
|
/page/$page/:
|
|
Get: pageDetail
|
|
Delete: pageDelete
|
|
Post: pageUpdate
|
|
/user/#id/:
|
|
Get: userInfo
|
|
|]
|
|
|
|
ph :: Handler MyYesod RepChooser -> IO ()
|
|
ph h = do
|
|
let eh e = return $ chooseRep $ toHtmlObject $ show e
|
|
rr = error "No raw request"
|
|
y = MyYesod
|
|
cts = [TypeHtml]
|
|
res <- runHandler h eh rr y cts
|
|
print res
|
|
|
|
main :: IO ()
|
|
main = do
|
|
ph $ handler ["static", "foo", "bar", "baz"] Get
|
|
ph $ handler ["foo", "bar", "baz"] Get
|
|
ph $ handler ["page"] Get
|
|
ph $ handler ["user"] Get
|
|
ph $ handler ["user", "five"] Get
|
|
ph $ handler ["user", "5"] Get
|