2009-04-19 8 views
10

मेरे पास मेरे मॉड्यूल में निम्न टेम्पलेट हास्केल कोड है, जो एक बड़े एप्लिकेशन का हिस्सा है।मैं टेम्पलेट हास्केल स्टेटमेंट से आउटपुट को आसानी से कैसे देख सकता हूं?

$(derive makeFoldable ''JStatement) 

मुझे लगता है कि Foldable के उत्पन्न उदाहरण नहीं है कि वास्तव में क्या मैं मूल रूप से मन में था, लेकिन मैं इसे प्रमाणित करने के लिए एक रास्ता नहीं मिल रहा। तो, केवल ghci का उपयोग करके प्राथमिकता से उत्पन्न उदाहरण को देखना संभव है?

मैंने निम्नलिखित की कोशिश की और मुझे वाक्यविन्यास त्रुटि मिली और मुझे लगता है कि ऐसा इसलिए है क्योंकि मैं इसे गलत कर रहा हूं।

> derive makeFoldable ''JStatement 

<interactive>:1:21: 
    lexical error in string/character literal at character '\'' 

उत्तर

11

मैंने इसे समझ लिया। यदि आप -ddump-splices पास करते हैं तो यह मॉड्यूल को संकलित करते समय जेनरेट किए गए उदाहरण टर्मिनल पर प्रिंट करेगा।

1

GHCi रिपोर्ट "lexical error..." क्योंकि आप खाका हास्केल अपने GHCi सत्र में सक्रिय नहीं है। आप इसे या तो सक्रिय कर सकते हैं कमांड लाइन पर या से -XTemplateHaskell गुजर GHCi के भीतर ही द्वारा: फिक्सिंग उसके बाद

ghci> :set -XTemplateHaskell 

, आप की पसंद में कोई त्रुटि मिलना चाहिए: अब

No instance for (Show DecsQ) arising from a use of ‘print’ 
In a stmt of an interactive GHCi command: print it 

, आपके पास मोनैड:

    के अंदर मौजूद चीजों को प्रिंट करने के लिए कई विकल्प हैं
  • उपयोग -ddump-splices (पहले से ही Deniz Dogan's answer में बताया के रूप में)

  • सुंदर GHCi में से ही हास्केल कोड प्रिंट:

    > putStrLn $(stringE . pprint =<< derive makeFoldable ''JStatement) 
    instance Foldable (JStatement ...) 
        where foldr ... = ... 
    
  • वास्तविक संरचना दिखाएँ कंस्ट्रक्टर्स के आधार पर:

    > putStrLn $(stringE . show =<< derive makeFoldable ''JStatement) 
    [InstanceD [] (AppT (ConT Foldable) (... JStatement ...)) [...]] 
    

अंतिम runQ, का उपयोग करके दो को सरल बनाया जा सकता है लेकिन यह कोड जनरेशन के लिए काम नहीं करता है कि कुछ टेम्पलेट हास्केल फ़ंक्शंस, जैसे reify संचालन का उपयोग करता है। इसमें व्युत्पन्न पैकेज के कुछ (या शायद सबसे अधिक?) व्युत्पन्न शामिल हैं।

+1

आपका उत्तर मुझे इस तथ्य से दूर कर दिया कि आप एक ghci सत्र के भीतर 'सेट -XTemplateHaskell' और फिर' सेट -ddump-splices 'कर सकते हैं। मुझे पता नहीं था। – liminalisht

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

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