Haskell Scotty如何创建应用构造函数 {-#语言重载字符串} 导入控制 导入数据.幺半群 导入数据.String 导入Network.Wai.Middleware.RequestLogger 导入Web.Scotty 数据全名=全名{firstName::String,lastName::String} lastFirst::FullName->String lastFirst fn=lastName fn++“,”++firstName fn main=scotty 3000$do 中间件logStdoutDev 获取“/lastfirst/:fn/:ln”$do 全名
这是因为Haskell Scotty如何创建应用构造函数 {-#语言重载字符串} 导入控制 导入数据.幺半群 导入数据.String 导入Network.Wai.Middleware.RequestLogger 导入Web.Scotty 数据全名=全名{firstName::String,lastName::String} lastFirst::FullName->String lastFirst fn=lastName fn++“,”++firstName fn main=scotty 3000$do 中间件logStdoutDev 获取“/lastfirst/:fn/:ln”$do 全名,haskell,applicative,scotty,Haskell,Applicative,Scotty,这是因为参数“fn”不是字符串,而是产生字符串的ActionM。我们不希望将操作存储在FullName中,我们希望运行该操作,获取其结果并存储该结果 我们可以按如下方式运行操作 {-# LANGUAGE OverloadedStrings #-} import Control.Applicative import Data.Monoid import Data.String import Network.Wai.Middleware.RequestLogger import Web.Sc
参数“fn”
不是字符串
,而是产生字符串的ActionM
。我们不希望将操作存储在FullName
中,我们希望运行该操作,获取其结果并存储该结果
我们可以按如下方式运行操作
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Data.Monoid
import Data.String
import Network.Wai.Middleware.RequestLogger
import Web.Scotty
data FullName = FullName { firstName :: String, lastName :: String }
lastFirst :: FullName -> String
lastFirst fn = lastName fn ++ ", " ++ firstName fn
main = scotty 3000 $ do
middleware logStdoutDev
get "/lastfirst/:fn/:ln" $ do
fullName <- FullName <$> param "fn" <*> param "ln"
html $ fromString (lastFirst fullName)
get”/lastfirst/:fn/:ln“$do
fn感谢您的回复,我们可以用全名“John”“Hanks”创建一个新记录吗?为什么?@没有人不,只需使用全名“John”“Hanks”
,因为这些是字符串,而不是动作。只有当您有操作时才使用/
,并且您需要执行这些操作才能得到结果。非常感谢您的解释!
get "/lastfirst/:fn/:ln" $ do
fn <- param "fn"
ln <- param "ln"
let fullName = FullName fn ln
html $ fromString (lastFirst fullName)