2015-06-30 4 views
6

मैं टेम्पलेट हास्केल के साथ क्यू मोनैड में राज्यों को संभालना चाहता हूं। कुछ स्टैक ओवरफ़्लो के उत्तरों के मुताबिक, एक समाधान है जो unsafePerformIO का उपयोग करता है, लेकिन जब तक मैं कर सकता हूं तब तक इसका उपयोग करना टालना चाहता हूं।टेम्पलेट हैकेल में getQ और putQ का उपयोग कैसे करें?

मुझे मॉड्यूल Language.Haskell.TH.Syntax में getQ और putQ मिला। ये फ़ंक्शन टेम्पलेट-हैकेल 2.10 दस्तावेज़ द्वारा दिखाए गए क्यू मोनैड में राज्यों को संभालते हैं। मैंने इस एपीआई का उपयोग करने की कोशिश की, लेकिन getQ राज्यों को पाने में विफल रहा।

निम्नलिखित कोड मेरी समस्या का एक उदाहरण है। मुझे (Just B) से बाध्य होने की उम्मीद है, लेकिन x हमेशा Nothing है।

-- X.hs 
{-# LANGUAGE DeriveDataTypeable #-} 
module X where 
import Data.Typeable 
data T = A | B | C deriving (Typeable,Show) 


-- Y.hs 
{-# LANGUAGE TemplateHaskell #-} 
module Y where 
import X 
import Language.Haskell.TH 
import Language.Haskell.TH.Syntax 
-- splice for testing getQ and putQ 
do 
    putQ B 
    x <- getQ :: Q (Maybe T) 
    runIO $ print x -- prints Nothing 
    return [] 

परिणामस्वरूप, मुझे संकलन संदेश निम्नलिखित मिला।

$ ghc -fforce-recomp Y.hs 
[1 of 2] Compiling X    (X.hs, X.o) 
[2 of 2] Compiling Y    (Y.hs, Y.o) 
Nothing 

getQ और putQ का उपयोग कैसे करें?

उत्तर

1

वर्तमान में getQ में एक बग है: इसे हाल ही में तय किया गया था और जीएचसी के अगले संस्करण में काम करना चाहिए।

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