首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell Scotty网络服务器发送文本响应

Haskell Scotty网络服务器发送文本响应
EN

Stack Overflow用户
提问于 2015-02-13 14:56:33
回答 1查看 728关注 0票数 2

我收到一个get请求,并希望发送一条短信作为对它的响应。我有以下代码,但正在收到以下错误

代码语言:javascript
复制
{-# 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"

当我试图运行服务器时,我遇到的错误是

代码语言:javascript
复制
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" }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-13 15:14:20

param的类型为Parsable a => Text -> ActionM a。如您所见,a是多态的,只需要一个Parsable a实例。这也是返回类型。但是正如您所看到的,在文件中可解析有几个实例可用!GHC不知道您想要什么,因此出现了不明确的错误。您需要指定一个类型注释,让GHC知道您想要什么。但是无论如何,让我们来写代码

beam <- param "q" :: ActionM Text

应该能起作用。现在,beam应该是一个Text。但也许您希望参数是一个整数,所以类似于

beam <- param "q" :: ActionM Integer

也能起作用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28502302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档