6

नामक टेम्पलेटहस्केल का शाब्दिक मूल्य कैसे प्राप्त करें यदि मेरे पास टेम्पलेट हास्केल में Name है और वे उस वैरिएबल के मान को जानना चाहते हैं जो नाम है, बशर्ते वेरिएबल को शाब्दिक घोषित किया जाए, क्या यह किया जा सकता है?चरम

var = "foo" 
-- Can `contentsOf` be defined? 
$((contentsOf . mkName $ "var") >>= guard . (== "foo")) 

उत्तर

4

सिद्धांत रूप में, हाँ। अभ्यास में, नहीं।

मौजूदा नाम reify :: Name -> Q Info उपयोग किया जाता है के बारे में सामान पता लगाना, और की तरह है कि आप वापस एक VarI मूल्य है, जो एक Maybe Dec क्षेत्र शामिल होगा परिभाषा देखने के लिए। ऐसा लगता है कि आप कुछ मामलों में चर के घोषणापत्र के लिए सिंटैक्स पेड़ प्राप्त करने में सक्षम हो सकते हैं, जो आपको शाब्दिक निकालने की अनुमति देगा, हालांकि current versions of GHC always returns Nothing in this field, इसलिए आप एक शुद्ध TH समाधान के लिए भाग्य से बाहर हैं।

हालांकि, TH मनमाने ढंग से आईओ क्रियाओं को चलाने की अनुमति देता है, इसलिए आप haskell-src-exts जैसे कुछ का उपयोग करके मॉड्यूल को लोड और पार्स करके संभावित रूप से इसके आसपास काम कर सकते हैं, हालांकि मुझे संदेह है कि यह इसके लायक होने से अधिक परेशानी होगी।

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

  • कोई संबंधित समस्या नहीं^_^