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)