Yesod
책 예제가 Yesod 웹 페이지에 설명되어 있습니다. 예 중 하나는 Chat application embedded in Wiki입니다. 나는 (위키 예제 코드가 포함되어 Wiki.hs
에서 Chat
모듈을로드) ghci에서 그것을 시도 할 때, 나는 Chat.hs 아래의 오류 :일부 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) [])),
....]'
나는 아직 Yesod 라이브러리에 익숙하지 않다. 그래서, 나는 위의 오류에 의해 난처한 오전 - 내가 다른 Yesod 예제 에서이 오류를 보았습니다 toWidget
함수가 호출됩니다. 그래서, 그것은 toWidget
함수와 관련이있는 것 같습니다. 위의 오류를 수정하는 데 도움을 주셔서 감사합니다.
나는 ghc 7.6.1
과 yesod 1.1.4.1
을 사용하고 있습니다.
업데이트 :
이 Hammar와의 제안 다음 수정되었습니다. Chat.hs
에서 두 가지 변경을했습니다. rawJS에 대한
추가 import 문 :
import Text.Julius (rawJS)
트랙 아래로 모든
Chat.hs
에julius whamlet
내에서 # {} 블록의 인스턴스 및{# rawJS ...}
로 교체var output = document.getElementById("#{rawJS output}");
에서
감사합니다, @hammar. 그것은 정확히 문제였습니다. julius whamlet 안의 모든 # {} 블록을 추적하고 rawJS로 바꾼 후에 수정되었습니다. – Sal