2012-04-03 14 views
67

Javascript'te programladığımda, herhangi bir noktada program yürütmeyi durdurmak ve komutları çalıştırabilmek ve değişkenleri oradan denetlemek için hata ayıklayıcısını kullanabilmek için son derece'u bulabilirim.Bir üst düzey işlev içinde tanımlanan iç işlevleri test etmenin ve etkileşimin en iyi yolu nedir?

Şimdi, Haskell'e geri döndüğünüzde, etkileşimli GHCI REPL'de rastgele işlevler yürütmenin bir yolu var mı, yoksa üst düzeyde bildirilen şeylerle sınırlı mıyım?

İçsel işlev ve değerlerin çalışma ve hata ayıklamalarına "standart" yaklaşım nedir?

cevap

85

GHCi'de bir kesme noktasında durdurulduğunda, kapsamdaki her şeye erişebilirsiniz. Sen foo bir kesme noktası ayarlayabilirsiniz

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

ve onu çağıran deneyin: Diyelim ki böyle bir işlevi var diyelim

> :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 bu noktada henüz kapsamında değildir, bu yüzden adım var bir kere:

:

[/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 

Şimdi bu g kapsamda, biz herhangi bir üst düzey işlevi gibi kullanabilirsiniz

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

GHCi'de tanımlanan işlevlerle benzer bir şey yapılabilir mi? – haskelline

+2

@brence: Sınır değerlerini etkileşimli olarak tanımlanan işlevlere ayarlayamazsınız. Yani hayır, öyle düşünmüyorum. – hammar

+0

Ah, bir cankurtaran cevap, çok teşekkürler! –

İlgili konular