नहीं होना चाहिए मेरे पास यह हास्केल कोड है जो जीएचसी के साथ संकलित और चलाया जाता है, एक लूप के साथ aborts का पता चला।हास्केल प्रोग्राम "लूप" के साथ बंद करता है लेकिन मुझे लगता है कि यह
data Foo = Foo()
deriving (Eq,Show)
type Foop = Foo -> ((),Foo)
noOp :: Foop
noOp st = ((),st)
someOp :: Foop
someOp [email protected](Foo x) = ((),st)
(<+>) :: Foop -> Foop -> Foop
(<+>) f g st = let ((_,st'),(_,st'')) = ((f st),(g st')) in ((),st'')
main = print $ (noOp <+> someOp) $ Foo()
मुझे लगता है कि यह नहीं होना चाहिए, और यहां कुछ संशोधन हैं। उनमें से प्रत्येक पाश दूर जाना बनाता है:
- परिवर्तन
data Foo
newtype Foo
- - परिवर्तन
(noOp <+> someOp)
(someOp <+> noOp)
- - हटाने विखंडन
@(Foo x)
इस GHC में एक बग है या यह मेरी कमी है मूल्यांकन प्रक्रिया को समझने के लिए?
यह एक अपरिहार्य मैच का उपयोग करने के लिए पर्याप्त है: 'चलो ((_, सेंट'), ~ (_, st '')) = (f st, g st ') '। – leftaroundabout
@ बाएंअराउंडबाउट 'पहली चीज' की मांग नहीं की जा रही है? 'चलो ... में ((), सेंट' ')'। इसके अलावा, सामान्य मामले में 'जी' गैर-सख्त हो सकता है। – chi
धन्यवाद, वह अंतर्दृष्टिपूर्ण था। अब मेरे कोड में कोई 'अपरिभाषित' नहीं है और मैं अभी भी नहीं देखता कि यह क्यों लूप करता है। क्या आप उस पर कुछ प्रकाश भी डाल सकते हैं? –