[這個問題是由第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