Sto provando Yesod
esempi di libri documentati sulla pagina web Yesod. Uno degli esempi è per Chat application embedded in Wiki. Quando provo in ghci (caricamento Chat
modulo dal Wiki.hs
che contiene Wiki codice di esempio), ottengo l'errore sotto per Chat.hs:Errore di compilazione durante il tentativo di alcuni esempi Yesod
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) [])),
....]'
Io non sono molto familiare con le librerie Yesod ancora. Quindi, sono perplesso dall'errore di cui sopra - Ho visto questo errore anche in altri esempi Yesod dove viene chiamata la funzione toWidget
. Quindi, sembra essere correlato alla funzione toWidget
. Apprezzerò l'aiuto nel correggere l'errore di cui sopra.
Sto usando ghc 7.6.1
con yesod 1.1.4.1
.
Aggiornamento:
fisso seguendo il suggerimento di Hammar. Ho apportato due modifiche in Chat.hs
.
Add dichiarazione di importazione per rawJS:
import Text.Julius (rawJS)
rintracciare tutte le istanze di # {} blocchi all'interno
julius whamlet
inChat.hs
, e sostituirli con{# rawJS ...}
var output = document.getElementById("#{rawJS output}");
var input = document.getElementById("#{rawJS input}");
grazie, @hammar. Questo era esattamente il problema. Risolto adesso dopo aver rintracciato ogni blocco # {} all'interno di julius whamlet e sostituito con rawJS. – Sal