你好,我想问haskell的同事们,如果你有一长串纯方法,你怎么能高效地调试haskell程序。例如:
do
a<-impure
(pure a) # where pure calls pure1->pure2->pure2
如果一切都不正常,我如何调试调用堆栈深处的任何东西
IO
所以我不能
print
或
writeFile
没有重大努力的地方?
haskell fellows会把所有签名都改成
IO something
看看代码在哪里崩溃?
具体例子
主要的
module Main where
import Data.Text(Text,pack,unpack)
import Data.Text.IO(readFile,writeFile)
import TCPFile(TCPFile)
import TCPEncoding(toText,fromText)
main::IO()
main=do
dat<-readTcpFile "test.txt"
print dat
writeTcpFile "output.txt" dat
writeTcpFile::FilePath->TCPFile->IO()
writeTcpFile path file=Data.Text.IO.writeFile path (toText file)
readTcpFile::FilePath->IO TCPFile
readTcpFile path =fromText <$> Data.Text.IO.readFile path
module TCPEncoding where
import Data.Text
class TextEncode a where
toText::a-> Text
fromText::Text-> a
我不会写方法的整个层次结构。我只想知道如何运行程序,直到某一行,并获得变量值和堆栈帧。
在这个程序的情况下,我最后得到的所有信息都用
writeTcpFile
是:
main: <<loop>>
那么我如何调试
fromText
内部使用的方法
readTcpFile
它的内部呢?