मैं टेम्पलेट हास्केल के साथ क्यू मोनैड में राज्यों को संभालना चाहता हूं। कुछ स्टैक ओवरफ़्लो के उत्तरों के मुताबिक, एक समाधान है जो 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
का उपयोग कैसे करें?