私はwaiアプリケーションの基本的なディスパッチセクションに従っています。IO内部アプリケーションを実行
私はurlパラメータをキャッチすることができます。これらのパラメータを使用してIO操作を実行するにはどうすればよいですか。
これらのパラメータを使用してシステムコマンドを実行するには、System.ProcessのrunCommand
を使用します。
:runCommand関数をtあなたのデザインは、なぜならあなたがapp
を書かれている方法で、すぐにあなたと言う
app request respond = respond $ case rawPathInfo request of
それを防ぐ runCommand :: String -> IO ProcessHandle
私のMain.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad
import Network.Wai
import Network.HTTP.Types
import Network.Wai.Handler.Warp (run)
import Data.ByteString
import Control.Monad
import System.Process
import qualified Data.ByteString.Lazy.Char8 as L8
main :: IO()
main = do
run 8080 app
app :: Application
app request respond = respond $ case rawPathInfo request of
"/" -> indexHtml
"/wake" -> wakeMeUP request
_ -> fourNotFour
indexHtml :: Response
indexHtml = responseFile
status200
[("Content-Type","text/html")]
"index.html"
Nothing
wakeMeUP :: Request -> Response
wakeMeUP request =
let query = queryString request
hour = join $ lookup "hour" query
min = join $ lookup "min" query
--I would like to use runCommand "using hour and min variables"
in responseLBS
status200
[("Content-Type","text/plain")]
"Alarm set at...to be coded later"
fourNotFour :: Response
fourNotFour = responseLBS
status404
[("Content-Type","text/plain")]
"404 not found"
ありがとうございました。それは完璧な意味合いがあります。私は質問を投稿した後、同様の解決策に達しました。しかし私のコードでは、ルートコードを緩めなければならなかった。私はモナドを理解するが、私はIOのより多くの運動をする必要があることを認識した。 –