Haskell 变量不在范围内:catch

Haskell 变量不在范围内:catch,haskell,Haskell,我有这个函数用这个代码打开一个文件,但它正在返回 teste.hs: 228: 5: error: Variable not in scope: catch :: IO Handle -> (t0 -> IO Handle) -> IO Handle 我的代码: opensArchive :: String -> IOMode -> IO Handle opensFile file mode = catch (openFile mode

我有这个函数用这个代码打开一个文件,但它正在返回

teste.hs: 228: 5: error:
    Variable not in scope:
      catch :: IO Handle -> (t0 -> IO Handle) -> IO Handle
我的代码:

opensArchive :: String -> IOMode -> IO Handle
opensFile file mode =
    catch (openFile mode file)
       (\ _ -> do {
     putStrLn ("Unable to open" ++ file);
     putStrLn "It will be opened with a default name: data.txt and cleared";
     pt_arq <- opensFile "data.txt" WriteMode;
     closeArchive pt_arq;
     opensFile "data.txt" ReadMode
      }
    )

closeArchive :: Handle -> IO ()
closeFile handle_arq = hClose handle_arq
opensArchive::String->IOMode->IO句柄
opensFile文件模式=
catch(openFile模式文件)
(\ \ \->do{
putStrLn(“无法打开”++文件);
putStrLn“将以默认名称打开:data.txt并清除”;
pt_arq IO()
closeFile handle\u arq=hClose handle\u arq

您可能需要查看函数
catch
的规范

浏览至。然后在网页左上角的搜索字段中输入“catch”

然后单击顶部的解决方案。这将使您进入for函数
catch

在该页面的最顶端,您将看到它是关于模块
控制的。异常
。您导入了它吗

在ghci下进行测试:

$ ghci
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
...
 λ> 
 λ> :type catch

 <interactive>:1:1: error: Variable not in scope: catch
 λ> 
 λ> import Control.Exception
 λ> 
 λ> :type catch
 catch :: Exception e => IO a -> (e -> IO a) -> IO a
 λ> 
 λ> 
$ghci
GHCi,8.6.5版:http://www.haskell.org/ghc/  :?寻求帮助
...
λ> 
λ> :类型捕捉
:1:1:错误:变量不在范围内:catch
λ> 
λ> 导入控制。异常
λ> 
λ> :类型捕捉
catch::Exception e=>ioa->(e->ioa)->ioa
λ> 
λ> 

瞧!

您可能想在问题的标题中提到,问题在于Haskell未能找到函数
catch