Yesod
Yesod Web ページに記載されている書籍の例を試しています。例の 1 つは、Wiki に埋め込まれた Chat アプリケーションです。ghci ( Wiki サンプル コードを含むChat
モジュールのロード) で試してみると、Chat.hs に対して以下のエラーが発生します。Wiki.hs
Chat.hs:122:34:
Could not deduce (Text.Julius.ToJavascript Text)
arising from a use of `Text.Julius.toJavascript'
from the context (YesodChat master)
bound by the type signature for
chatWidget :: YesodChat master =>
(Route Chat -> Route master) -> GWidget sub master ()
at Chat.hs:(81,15)-(83,35)
Possible fix:
add an instance declaration for (Text.Julius.ToJavascript Text)
In the first argument of `Text.Julius.Javascript', namely
`Text.Julius.toJavascript output'
In the expression:
Text.Julius.Javascript (Text.Julius.toJavascript output)
In the first argument of `Data.Monoid.mconcat', namely
`[Text.Julius.Javascript
((Data.Text.Lazy.Builder.fromText . Text.Shakespeare.pack')
"\
\// Set up the receiving end\
\var output = document.getElementById(\""),
Text.Julius.Javascript (Text.Julius.toJavascript output),
Text.Julius.Javascript
((Data.Text.Lazy.Builder.fromText . Text.Shakespeare.pack')
"\");\
\var src = new EventSource(\""),
Text.Julius.Javascript
(Data.Text.Lazy.Builder.fromText
(_render_a3Yr (toMaster ReceiveR) [])),
....]'
私は Yesod ライブラリについてまだよく知りません。だから、私は上記のエラーに困惑しています -toWidget
関数が呼び出される他の Yesod の例でもこのエラーを見ました。ということで、機能に関係しているようtoWidget
です。上記のエラーを修正するための助けをいただければ幸いです。
で使用ghc 7.6.1
していyesod 1.1.4.1
ます。
アップデート:
Hammar の提案に従って修正されました。で 2 つの変更を加えましたChat.hs
。
rawJS のインポート ステートメントを追加します。
import Text.Julius (rawJS)
julius whamlet
in内の #{} ブロックのすべてのインスタンスを追跡しChat.hs
、それらを{# rawJS ...}
var output = document.getElementById("#{rawJS output}");
var input = document.getElementById("#{rawJS input}");