इस दिन एक दिन के लिए मेरे सिर खरोंच कर रहा है।सशर्त में मोनाडिक अभिव्यक्तियां - जीएचसी संकलन, कैबल
मैं अपने कोड में कुछ कार्यों कि इस तरह दिखना है:
function :: IO (Maybe Whatever)
function = do
monadFun
yaySomeIO
status <- maybeItWillFail
if checkStatus status -- Did we succeed?
then monadTime >>= return . Just . processItPurely
else return Nothing
GHCi लोड और कोई समस्या नहीं के साथ सहभागी इस चलेंगे, और GHC यह खुशी से संकलित कर देगा।
myProgram.hs:94:16:
Unexpected semi-colons in conditional:
if checkStatus status; then monadTime >>= return . Just . processItPurely; else return Nothing
Perhaps you meant to use -XDoAndIfThenElse?
और जो कुछ भी इस -XDoAndIfThenElse
विकल्प है, मैं किसी भी दस्तावेज में कहीं भी यह के निशान खोजने के लिए प्रतीत नहीं कर सकते हैं: कबाल के माध्यम से इस चल रहा है, फिर भी, मुझे इस देता है। कैबल क्यों है (या इस बिंदु से यह ghc है?) अर्ध-कॉलन का उपयोग करने के लिए मुझ पर चिल्लाना है कि आईटी पहले स्थान पर रखता है? या यदि मोनैडिक एक्सप्रेशन का उपयोग कर रहे हैं तो क्या बयान सिर्फ एक बुरा विचार है?
ध्यान दें कि कबाल इस बारे में बिल्कुल भी शिकायत नहीं करता है:
case checkStatus status of
True -> monadTime >>= return . Just . processItPurely
_ -> return Nothing
... इस को छोड़कर नरक के रूप में बदसूरत है और मैं अपने कोड में यह रखना चाहता हूँ कभी नहीं होगा। क्या कोई मुझे बता सकता है कि क्या हो रहा है? कृपया और अग्रिम धन्यवाद।
धन्यवाद, मैं केवल इंडेंट्स को आवश्यकतानुसार जोड़ दूंगा! –