में जारी मैं निम्नलिखित कोड मॉड्यूल लोड और एक अभिव्यक्ति के प्रकार के प्राप्त करने के लिए GHC एपीआई का उपयोग करता है:कैसे संभाल करने के लिए "आतंक: असंभव हुआ" और हास्केल
typeObjects :: [String] -> [String] -> IO [Type]
typeObjects modules objects = do
defaultErrorHandler defaultDynFlags $ do
runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
setSessionDynFlags dflags
targets <- mapM ((flip guessTarget) Nothing) modules
setTargets targets
result <- load LoadAllTargets
case result of
Failed -> error "Compilation failed"
Succeeded -> do
m <- mapM (((flip findModule) Nothing) . mkModuleName) modules
setContext m []
values <- mapM exprType objects
return values
तो भाव डॉन ' टी टाइप चेक, पूरे कार्यक्रम के साथ दुर्घटनाग्रस्त:
TestDynamicLoad: panic! (the 'impossible' happened)
(GHC version 7.0.3.20110330 for x86_64-unknown-linux):
Couldn't match expected type `GHC.Types.Int'
with actual type `[GHC.Types.Char]'
मैं इसे कैसे बना सकता हूं ताकि यह प्रोग्राम को क्रैश न करे? मैं सिर्फ यह जानना चाहता हूं कि कौन से अभिव्यक्ति प्रकार सफलतापूर्वक चेक किए गए थे और कौन नहीं था।
यदि आप कंपाइलर को क्रैश करने में कामयाब रहे हैं, तो यह एक कंपाइलर त्रुटि है। जांचें कि यह एक ज्ञात बग है, अन्यथा इसकी रिपोर्ट करें। – Landei
मुझे नहीं लगता कि यह एक बग है। यह सही है। मैंने रनटाइम पर एक अभिव्यक्ति को संकलित करने की कोशिश की जिसने एक स्ट्रिंग में पारित करने की कोशिश की जहां एक इंट की उम्मीद थी। मैं बस उस त्रुटि को "पकड़ना" चाहता हूं और अभिव्यक्ति को "चिह्नित" करना चाहता हूं, जबकि अन्य जो त्रुटि नहीं करते हैं, मैं सफल मानता हूं। – mentics
@taotree एक त्रुटि की रिपोर्ट करना सही व्यवहार है। एक "दहशत" के साथ दुर्घटनाग्रस्त हो रहा है ('असंभव' हुआ) "सही व्यवहार नहीं है। इसे एक बग के रूप में रिपोर्ट करें। –