मैं Learn You a Haskell's guide on the state monad पढ़ रहा था, लेकिन मुझे इसे समझने में परेशानी थी क्योंकि स्टैक उदाहरण संकलित नहीं हो सका। गाइड में, उन्होंने कोड के निम्नलिखित भाग का उपयोग किया:राज्य मोनड और learnyouahaskell.com
import Control.Monad.State
type Stack = [Int]
pop :: State Stack Int
pop = State $ \(x:xs) -> (x,xs)
push :: Int -> State Stack()
push a = State $ \xs -> ((),a:xs)
जबकि मैं समझता हूं कि यह क्या करना है, यह संकलित नहीं होगा। मुझे कोई जानकारी नहीं है की क्यों। त्रुटि संदेश है:
Stack.hs:6:7: Not in scope: data constructor `State'
Stack.hs:9:10: Not in scope: data constructor `State'
यह कोई मतलब नहीं मेरे लिए मेरी जानकारी के लिए एक डेटा निर्माता,
newtype State s a = State { runState :: s -> (a,s) }
के रूप में परिभाषित करता है, के बाद से "राज्य" है, वास्तव में गाइड "गलत" है , और यदि हां, तो मैं इसे कैसे ठीक करूं?
'Control.Monad.State'' राज्य 'कन्स्ट्रक्टर को निर्यात नहीं करता है,' राज्य '(निम्न-मामले '' के साथ) का उपयोग नहीं करता है। – Vitus
@ विटस नाइस, मुझे नहीं पता था [वह फ़ंक्शन] (http://hackage.haskell.org/packages/archive/transformers/latest/doc/html/Control-Monad-trans-State-Lazy.html#v : राज्य) निर्यात किया गया था। मुझे लगता है कि आपको इसे टिप्पणी के बजाय उत्तर के रूप में लिखना चाहिए। – danr
@ विटस: यह अजीब है, क्योंकि उसका कोड वास्तव में संकलित करता है और विंडोज़ पर मेरे जीएचसीआई 6.12.3 पर अच्छा प्रदर्शन करता है। –