[这个问题是由第9章中的“真实世界哈斯克尔”动机]
这里有一个简单的函数(砍倒要领):
saferOpenFile path = handle (\_ -> return Nothing) $ do
h <- openFile path ReadMode
return (Just h)
为什么我需要一个$
?
如果处理的第二个参数是不是DO块,我并不需要它。下面的作品就好了:
handle (\_ -> putStrLn "Error calculating result") (print x)
当我试图消除$
编译失败。我可以得到它,如果我明确地加括号的工作,即
saferOpenFile path = handle (\_ -> return Nothing) (do
h <- openFile path ReadMode
return (Just h))
我能理解,但我想我很期待,当哈斯克尔击中do
应该想到“我开始块”,而且我们不应该明确地把$
打破。
我也想过推DO块到下一行,像这样:
saferOpenFile path = handle (\_ -> return Nothing)
do
h <- openFile path ReadMode
return (Just h)
但是,这并不没有括号工作,要么。这让我困惑,因为以下工作:
add a b = a + b
addSeven b = add 7
b
我敢肯定,我只是达到,我接受它作为“这只是你如何写成语哈斯克尔”的地步,但没有任何人有任何的角度给?提前致谢。
对不起,伙计们,我不知道stackoverflow非常好。代码只是垃圾。 (为什么没有“预览问题”)。我会尝试重新发布它。 – Jonathan 2011-02-06 03:50:46
只需点击编辑器工具栏上的“代码”按钮(它看起来像一对大括号)。此外,预览正好在您输入的地方,实时更新... – Jon 2011-02-06 03:52:22
啊,NoScript需要允许一个域!它现在看起来很好。谢谢,乔恩! – Jonathan 2011-02-06 03:54:20