[英]How to run IO inside ScottyM
我正在使用Scotty
編寫一個小的 web 應用程序。 我需要在ScottyM
類型中運行IO
。
有幾個困難:
首先,我不能自動從MonadIO
派生類型同義詞以運行liftIO
:
type ScottyM = ScottyT Text IO
其次,我不知道如何從 MonadIO 派生MonadIO
:
newtype ScottyT e m a
Constructors
ScottyT
runS :: State (ScottyState e m) a
我有哪些選擇?
謝謝
您是否有必要在ScottyM
而不是在開始之前運行您的scotty
?
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Data.Monoid (mconcat)
main = do
print "Hello world!" -- Or your IO action of choice
scotty 3000 $
get "/:word" $ do
beam <- param "word"
html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]
另一種選擇是濫用notFound
和next
在 ActionM 中運行ActionM
,這更直接:
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Control.Monad.Trans.Class (lift)
import Data.Monoid (mconcat)
main = scotty 3000 $ do
notFound $ do
lift $ print "Hello world!" -- Or some other IO action
next
get "/:word" $ do
beam <- param "word"
html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.