2015-10-20 10 views
6

यहाँ कोड है कि काम करने के लिए प्रयोग किया जाता है (उचित रूप से छोटा कर दिया मुझे आशा है कि)प्रतिक्रियाशील केला 1.0.0 - यह पुराना कोड क्यों टूट रहा है?

makeNetworkDescription :: forall t . Frameworks t => Parameters -> Moment t() 
makeNetworkDescription params = do 
    eInput <- fromAddHandler (input params) 
    eTick <- fromAddHandler (tick params) 
    .. 
let 
    bResourceMap :: Behavior t ResourceMap 
    bResourceMap = accumB initRmap $ 
     adjustMarket <$> 
     bMarketRolls <@ 
     eTick 

है लेकिन अब प्रकार बदल दिया है।
हमने:
makeNetworkDescription :: Parameters -> MomentIO() और accumB :: MonadMoment m => a -> Event (a -> a) -> m (Behavior a)

कहते हैं कि मैं थोड़ा accumB परिभाषा से दूर

bResourceMap :: Behavior ResourceMap 
bResourceMap = accumB initRmap $ 
       adjustMarket <$> 
       bMarketRolls <@ 
       eTick 

करने के लिए bResourceMap की परिभाषा बदलने के लिए, लेकिन देखते हैं क्या होता है।

ghc प्रकार accumB के व्यवहार एक MonadMoment के संदर्भ में होने की जरूरत है की वजह से एक त्रुटि

Couldn't match type ‘Behavior ResourceMap’ with ‘ResourceMap’ 
Expected type: Behavior ResourceMap 
    Actual type: Behavior (Behavior ResourceMap) 

अधिकार देता है। MonadMoment पर एक नज़र होने मैं दो उदाहरणों

instance MonadMoment Moment where liftMoment = id 
instance MonadMoment MomentIO where liftMoment = MIO . unM 

तो क्यों Behavior (Behavior ResourceMap) को वास्तविक प्रकार संकल्प किया था, बाहरी प्रकार एक MonadMoment, जो मेल नहीं खाता हो गया लगता है।

मुझे इस प्रकार की समस्या को हल करने के बारे में सलाह चाहिए, यह मेरी सभी Behavior परिभाषाओं के साथ होता है।

+0

सिर्फ उत्सुक: क्या यह वास्तविक या शौक परियोजना है? –

+0

यह वास्तविक है, लेकिन गेम क्वा गेम नहीं है। यह एक गेम होने के अलावा एक उद्देश्य की सेवा करने वाला एक गेम है। –

उत्तर

5

accumB के नए प्रकार फिट करने के लिए केवल एक let अभिव्यक्ति के बजाय एक monadic बाँध का उपयोग कर bResourceMap परिभाषित करने के लिए ले जाना चाहिए अपने कोड का समायोजन:

bResourceMap <- accumB initRmap (adjustMarket <$> bMarketRolls <@ eTick) 

प्रकार की त्रुटि आप बोली असंबंधित लगता है। मेरा अनुमान है कि initRmap को ResourceMap से Behavior ResourceMap पर गलती से बदल दिया गया था, जिससे टाइप मिस्चैच होता है।

+0

मैंने कोशिश की है लेकिन फिर अन्य बाइंडिंग गुंजाइश से बाहर हो जाते हैं। मुझे लगता है कि इसे रोकने के लिए मुझे रिकर्सिव डू जोड़ने की जरूरत है। –

+1

@ माइकल लिचर्ड वास्तव में - परिवर्तनों का मतलब है कि 'AcummB'/'stepper' के साथ परिभाषित व्यवहारों को पारस्परिक रूप से पुनरावर्ती परिभाषाओं के लिए आपको कुछ रूपों में' मोनाडफ़िक्स '/' रिकर्सिव डीओ 'की आवश्यकता होगी। – duplode

+0

भविष्य के हैकर्सर्स के लिए - कुंजी की बजाय mdo का उपयोग करना है। रिक और फिक्स के लिए सिंटेक्टिक चीनी। –

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