asp*_*yct 2 haskell types happstack
我目前正在关注他们网站上的Happstack lite教程.http://happstack.com/page/view-page-slug/9/happstack-lite-tutorial
现在,我正在实现该echo功能,编译器给我一个我不太懂的错误信息.这是我的代码:
echo :: ServerPart Response
echo =
path $ \(msg :: String) ->
ok $ template "echo" $ do
h1 "Echo service"
p "Giant, Haskell style Papagallo"
p msg
Run Code Online (Sandbox Code Playgroud)
这是错误信息:
src/motiondude.hs:35:15:
Couldn't match type `[Char]' with `Text.Blaze.Internal.MarkupM ()'
Expected type: Html
Actual type: String
In the first argument of `p', namely `msg'
In a stmt of a 'do' block: p msg
In the second argument of `($)', namely
`do { h1 "Echo service";
p "Giant, Haskell style Papagallo";
p msg }'
Run Code Online (Sandbox Code Playgroud)
我认为这是一个引用封闭的"东西",就像
"Giant, Haskell style Papagallo"
Run Code Online (Sandbox Code Playgroud)
是一个字符串.然而,根据我对编译器错误的理解,p不会接受字符串作为参数.谁可以给我解释一下这个?
问题是你似乎启用了OverloadedString扩展,这意味着
"foo" :: IsString a => a
Run Code Online (Sandbox Code Playgroud)
强迫一个普通的老人String做任何IsString只使用的东西fromString.然而,在这种情况下,Happstack具有html看起来更合适的功能.