Haskell Scotty 网络服务器发送文本响应
Haskell Scotty Webserver send a text response
我收到一个 GET 请求并想发送一条文本消息作为对 it.I 的响应有以下代码但我收到以下错误
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Network.Wai.Middleware.RequestLogger
import Data.Monoid (mconcat)
main = scotty 4000 $ do
middleware logStdoutDev
get "/" $ do
beam<- param "q"
text $ "The message which I want to send"
我尝试 运行 服务器时遇到的错误是
No instance for (Parsable t0) arising from a use of ‘param’
The type variable ‘t0’ is ambiguous
Note: there are several potential instances:
instance Parsable () -- Defined in ‘scotty-0.9.1:Web.Scotty.Action’
instance Parsable Bool
-- Defined in ‘scotty-0.9.1:Web.Scotty.Action’
instance Parsable Data.ByteString.Lazy.Internal.ByteString
-- Defined in ‘scotty-0.9.1:Web.Scotty.Action’
...plus 9 others
In a stmt of a 'do' block: beam <- param "q"
In the second argument of ‘($)’, namely
‘do { beam <- param "q";
text $ "The message I want to send" }’
In a stmt of a 'do' block:
get "/"
$ do { beam <- param "q";
text $ "The message I want to send" }
param
的类型为 Parsable a => Text -> ActionM a
。如您所见,a
是多态的,只需要 Parsable a
的一个实例。也是 return 类型。但是正如您所看到的 in the documentation Parsable 有几个可用的实例! GHC 不知道你想要什么,因此会出现模棱两可的错误。您将需要指定一个类型注释,让 GHC 知道您想要什么。但是无论如何,让我们写代码
beam <- param "q" :: ActionM Text
应该可以解决问题。现在 beam
应该是 Text
。但也许你希望你的参数是一个整数,比如
beam <- param "q" :: ActionM Integer
也可以。
我收到一个 GET 请求并想发送一条文本消息作为对 it.I 的响应有以下代码但我收到以下错误
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty
import Network.Wai.Middleware.RequestLogger
import Data.Monoid (mconcat)
main = scotty 4000 $ do
middleware logStdoutDev
get "/" $ do
beam<- param "q"
text $ "The message which I want to send"
我尝试 运行 服务器时遇到的错误是
No instance for (Parsable t0) arising from a use of ‘param’
The type variable ‘t0’ is ambiguous
Note: there are several potential instances:
instance Parsable () -- Defined in ‘scotty-0.9.1:Web.Scotty.Action’
instance Parsable Bool
-- Defined in ‘scotty-0.9.1:Web.Scotty.Action’
instance Parsable Data.ByteString.Lazy.Internal.ByteString
-- Defined in ‘scotty-0.9.1:Web.Scotty.Action’
...plus 9 others
In a stmt of a 'do' block: beam <- param "q"
In the second argument of ‘($)’, namely
‘do { beam <- param "q";
text $ "The message I want to send" }’
In a stmt of a 'do' block:
get "/"
$ do { beam <- param "q";
text $ "The message I want to send" }
param
的类型为 Parsable a => Text -> ActionM a
。如您所见,a
是多态的,只需要 Parsable a
的一个实例。也是 return 类型。但是正如您所看到的 in the documentation Parsable 有几个可用的实例! GHC 不知道你想要什么,因此会出现模棱两可的错误。您将需要指定一个类型注释,让 GHC 知道您想要什么。但是无论如何,让我们写代码
beam <- param "q" :: ActionM Text
应该可以解决问题。现在 beam
应该是 Text
。但也许你希望你的参数是一个整数,比如
beam <- param "q" :: ActionM Integer
也可以。