Haskell:最简单的wai示例的问题

TPJ*_*TPJ 2 haskell

我是一个Haskell新手,我正在努力让wai包工作(因为我对使用Haskell进行Web应用程序感兴趣).我试着从wai主页的第一个最简单的例子开始:

[ 1] {-# LANGUAGE OverloadedStrings #-}
[ 2] import Network.Wai
[ 3] import Network.Wai.Enumerator (fromLBS)
[ 4] import Network.Wai.Handler.SimpleServer (run)
[ 5] 
[ 6] app :: Application
[ 7] app _ = return Response
[ 8]     { status          = status200
[ 9]     , responseHeaders = [("Content-Type", "text/plain")]
[10]     , responseBody    = ResponseLBS "Hello, Web!"
[11]     }
[12] 
[13] main :: IO ()
[14] main = do
[15]     putStrLn $ "http://localhost:8080/"
[16]     run 8080 app
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码(使用runhaskell)时,我收到以下错误:

wapp.hs:10:3​​6:没有实例(Data.String.IsString Data.ByteString.Lazy.Internal.ByteString)来自文字"Hello,Web!",来自wapp.hs:10:3​​6-48

可能的修复:为(Data.String.IsString Data.ByteString.Lazy.Internal.ByteString)添加实例声明

ResponseLBS', namely"Hello,Web!" 的第一个参数中

在记录的`responseBody'字段中

在"return"的第一个参数中,即

`Response
 {status = status200,
  responseHeaders = [("Content-Type", "text/plain")],
  responseBody = ResponseLBS "Hello, Web!"}'
Run Code Online (Sandbox Code Playgroud)

这个例子有问题吗(我不这么认为,因为它来自wai主页 - 它应该是正确的!),或者我的Haskell系统有问题吗?

Car*_*arl 7

您需要导入模块,以导出IsString要用作重载字符串的类型的实例.看起来您没有导入任何导出IsString延迟字节串实例的模块.尝试将此导入添加到您的代码中:

import Data.ByteString.Lazy.Char8
Run Code Online (Sandbox Code Playgroud)

  • 您还可以更改导入以导入Data.ByteString.Lazy.Char8(),它将导入您需要的实例,但不会导入任何冲突的名称. (2认同)