在尝试处理一个异常时,我发现了一个相关的问题:
what is the Frege equivalent to Haskell's "interact" function?
但我不清楚如何使用try/catch/finally表达式。
问题:
我想读取一个文件并返回它的所有行。如果它不存在,我可能想返回一个空列表。类似于:
getContent :: String -> IO [String]
getContent filePath = openReader filePath >>= \reader -> reader.getLines
`catch` (\(e::FileNotFoundException) -> return [])
`finally` (println "something went wrong")前面的代码编译,但执行时只显示以下内容:
frege> getContent "asdf"
java.io.FileNotFoundException: asdf (No such file or directory)问题:
docs/wiki/frege goodness中更多的例子会有很大帮助。谢谢
发布于 2015-10-06 06:28:24
到目前为止,代码看起来不错,但是lambda有一个问题。就像在Haskell中一样,lambda在语法上尽可能地向右扩展。因此,尽管catch作为>>=具有较低的优先级,但它仍然属于lambda。
顺便说一句,这类lambda表达式有一个简短的表单:
_.foo 是一个词
\it -> it.foo此外,还可以应用额外的参数:
_.foo bar baz降至
\it -> it.foo bar baz这正是上述情况下所做的。
在REPL中,您可以使用:help命令获得关于catch、最后和>>=的文档。
你说得对,这对弗雷格善良来说是个好问题。然而,在github回购中也有一些有用的例子。对于本例,请查看示例/SimpleIO.fr
https://stackoverflow.com/questions/32959378
复制相似问题