2012-11-30 18 views
9

मैं Yesod यसोड वेबपृष्ठ पर प्रलेखित पुस्तक उदाहरणों की कोशिश कर रहा हूं। उदाहरणों में से एक Chat application embedded in Wiki के लिए है। जब मैं GHCi में यह कोशिश (जो विकी उदाहरण कोड शामिल Wiki.hs से Chat मॉड्यूल लोड हो रहा है), मैं Chat.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 फ़ंक्शन कहा जाता है। तो, ऐसा लगता है कि यह toWidget फ़ंक्शन से संबंधित है। मैं उपरोक्त त्रुटि को ठीक करने में मदद की सराहना करता हूं।

मैं के साथ ghc 7.6.1 का उपयोग कर रहा हूं।

अद्यतन:

Hammar के सुझाव निम्नलिखित फिक्स्ड। मैंने Chat.hs में दो बदलाव किए। rawJS के लिए

  1. जोड़ें इंपोर्ट स्टेटमेंट:

    import Text.Julius (rawJS)

  2. ट्रैक नीचे सभी Chat.hs में julius whamlet भीतर # {} ब्लॉक के उदाहरण हैं, और उन्हें {# rawJS ...}

    var output = document.getElementById("#{rawJS output}");

    के साथ बदलें

    var input = document.getElementById("#{rawJS input}");

उत्तर

12

मेरे पास इस समय परीक्षण करने के लिए यसोड स्थापित नहीं है, लेकिन this blog post के अनुसार आपको केवल #{output} से #{rawJS output} और जावास्क्रिप्ट पहचानकर्ताओं को इंटरपोल करते समय बदलना होगा।

+0

धन्यवाद, @hammar। वह बिल्कुल समस्या थी। जूलियस व्हामलेट के अंदर हर # {} ब्लॉक को ट्रैक करने के बाद अब इसे फिक्स्ड किया गया, और इसे कच्चेजेएस के साथ बदल दिया गया। – Sal

5

shakespeare-js-1.1.0 में, Text के लिए ToJavascript उदाहरणों और कुछ अन्य प्रकार हटा दिया गया है:

-- | A typeclass for types that can be interpolated in CoffeeScript templates. 
class ToJavascript a where 
    toJavascript :: a -> Builder 
#if 0 
instance ToJavascript [Char] where toJavascript = fromLazyText . TL.pack 
instance ToJavascript TS.Text where toJavascript = fromText 
instance ToJavascript TL.Text where toJavascript = fromLazyText 
instance ToJavascript Javascript where toJavascript = unJavascript 
instance ToJavascript Builder where toJavascript = id 
#endif 
instance ToJavascript Value where toJavascript = fromValue 

जबकि पैकेज के पिछले संस्करणों में, वे केवल सशर्त विकलांग थे:

#ifndef SAFER_INTERPOLATION 

मुझे नहीं पता कि यह जानबूझकर है और ऐसा रहने के लिए है, या सिर्फ एक भूल गए विकास परिवर्तन।

उदाहरण के लिए उपयोग करने के लिए, आपको shakespeare-js < 1.1 के खिलाफ हाँड पुनर्निर्माण करने की आवश्यकता होगी। इसका मतलब है कि पहले बहुत सारे पैकेज अनइंस्टॉल करना, या एक नया सैंडबॉक्स (यदि आप कैबल-देव या कुछ अन्य सैंडबॉक्सिंग टूल का उपयोग कर रहे हैं)। shakespeare-js-1.1.0 में ToJavascript की

केवल उदाहरणों RawJavascriptaeson पैकेज से (एक newtypeBuilder आसपास आवरण) और Value (JSON मूल्यों के लिए एक प्रकार) कर रहे हैं।

तुम बस output

Text.Julius.toJavascript output 

में एक RawJavascript . Data.Text.Lazy.Builder.fromText में एक RawJavascript मूल्य प्राप्त करने के लपेट और यह काम अगर यह वास्तविक कोड थे बना सकता है, लेकिन चूंकि यह वें-उत्पन्न है, तो आप वें ठीक करने के लिए आवश्यकता होगी उत्पादन या quasiquoter - जिनमें से कोई भी मुझे पता है कि कैसे करना है।

+0

धन्यवाद @ डैनियल-फिशर। दरअसल, हैमर ने बताया कि कच्चे जेएस गायब थे। – Sal

संबंधित मुद्दे