2017-04-23 30 views
0

我在源代碼中找到了定義。如何使用catchIOError作爲catch?

catchIOError :: IO a -> (IOError -> IO a) -> IO a 
catchIOError = catch 

如果我想使用catch,而不是catchIOError具有相同的結果,我該怎麼辦?

catchIOError (readFile "test") (\_ -> return "") 

,並用它喜歡:

catch (readFile "test") (\_ -> return "") 

這將是亂扔的變量類型

Ambiguous type variable ‘e0’ arising from a use of ‘catch’ 
prevents the constraint ‘(Exception e0)’ from being solved. 
Probable fix: use a type annotation to specify what ‘e0’ should be. 

換句話說異常,有沒有辦法來限制類型沒有定義一個新的功能。

回答

2

使用類型註釋:

(catch :: IO a -> (IOError -> IO a) -> IO a) (readFile "test") (\_ -> return "") 
+0

謝謝!我找到了!而且這個類型也可以在lambda exp中加註釋... – Vonfry