debugging - एक अपूर्ण समारोह के भीतर परिभाषित आंतरिक कार्यों के परीक्षण और बातचीत करने का सबसे अच्छा तरीका क्या है?



haskell read-eval-print-loop (1)

जब मैं जावास्क्रिप्ट में प्रोग्राम करता हूं, तो मुझे किसी भी बिंदु पर प्रोग्राम निष्पादन को रोकने के लिए डीबगर का उपयोग करने में सक्षम होना और कमांड चलाने और वहां से चर का निरीक्षण करने में सक्षम होना बेहद सुविधाजनक लगता है।

अब, हास्केल में वापस, क्या इंटरैक्टिव जीएचसीआई आरईपीएल में मनमानी कार्यों को चलाने का कोई तरीका है या क्या मैं अपूर्ण पर घोषित चीजों तक ही सीमित हूं?

आंतरिक कार्यों और मूल्यों को काम करने और डिबग करने के लिए "मानक" दृष्टिकोण क्या है?


जब आप जीएचसीआई में ब्रेकपॉइंट पर रुक जाते हैं, तो आप किसी भी चीज में पहुंच सकते हैं। मान लीजिए कि आपके पास ऐसा फ़ंक्शन है:

foo :: Int -> Int
foo x = g (x + 2)
  where g y = x^y 

आप foo पर ब्रेकपॉइंट सेट कर सकते हैं और इसे कॉल करने का प्रयास कर सकते हैं:

> :break foo
Breakpoint 1 activated at /tmp/Foo.hs:(2,1)-(3,17)
> foo 42
Stopped at /tmp/Foo.hs:(2,1)-(3,17)
_result :: Int = _

g इस बिंदु पर अभी तक दायरे में नहीं है, इसलिए हमें एक बार कदम उठाना है:

[/tmp/Foo.hs:(2,1)-(3,17)] > :step
Stopped at /tmp/Foo.hs:2:9-17
_result :: Int = _
g :: Integral b => b -> Int = _
x :: Int = 42

अब वह g गुंजाइश है, हम इसे किसी भी शीर्ष-स्तरीय फ़ंक्शन की तरह उपयोग कर सकते हैं:

[/tmp/Foo.hs:2:9-17] > g 2
1764
[/tmp/Foo.hs:2:9-17] > g 3
74088




ghci