我是一个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:36:没有实例(Data.String.IsString Data.ByteString.Lazy.Internal.ByteString)来自文字"Hello,Web!",来自wapp.hs:10:36-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系统有问题吗?
您需要导入模块,以导出IsString要用作重载字符串的类型的实例.看起来您没有导入任何导出IsString延迟字节串实例的模块.尝试将此导入添加到您的代码中:
import Data.ByteString.Lazy.Char8
Run Code Online (Sandbox Code Playgroud)