【发布时间】:2020-12-29 12:41:00
【问题描述】:
问题
以下是一个最小的、人为的例子:
read :: FilePath -> Aff String
read f = do
log ("File: " <> f) -- (1)
readTextFile UTF8 f -- (2)
我想在(1) 中进行一些调试日志记录,然后在(2) 上发生潜在错误。到目前为止,在 Spago REPL 中执行以下代码适用于成功案例:
$ spago repl
> launchAff_ $ read "test/data/tree/root.txt"
File: test/data/tree/root.txt
unit
问题:如果(2) 出现错误 - file is directory here - ,(1) 似乎根本没有执行:
$ spago repl
> launchAff_ $ read "test/data/tree"
~/purescript-book/exercises/chapter9/.psci_modules/node_modules/Effect.Aff/foreign.js:532
throw util.fromLeft(step);
^
[Error: EISDIR: illegal operation on a directory, read] {
errno: -21,
code: 'EISDIR',
syscall: 'read'
}
最初的问题更复杂,包括几层递归(请参阅E-Book exercise 3),我需要记录以调试上述错误。
问题
- 我如何才能正确记录这里即将出现的错误?
- (可选)是否有更复杂、完善的调试替代方案 - purescript-debugger?精心设计的 VS Code 调试扩展/功能将是锦上添花。
【问题讨论】:
-
我不确定这是否有帮助,但在任何 monadic (
do) 或 applicative (ado) 块中,您可以尝试traceMfrom:pursuit.purescript.org/packages/purescript-debug/4.0.0/docs/…。我经常使用它;-) -
@paluh 感谢您的提示,我猜您的思路是正确的(Spago REPL 也存在问题)。请参阅 Fyodor Soikin 的答案。
标签: debugging logging visual-studio-code functional-programming purescript