Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何处理;恐慌:不可能的事情发生了”;继续在哈斯克尔_Haskell_Dynamic Loading_Typechecking_Ghc Api - Fatal编程技术网

Haskell 如何处理;恐慌:不可能的事情发生了”;继续在哈斯克尔

Haskell 如何处理;恐慌:不可能的事情发生了”;继续在哈斯克尔,haskell,dynamic-loading,typechecking,ghc-api,Haskell,Dynamic Loading,Typechecking,Ghc Api,我有以下使用GHC API加载模块并获取表达式类型的代码: typeObjects :: [String] -> [String] -> IO [Type] typeObjects modules objects = do defaultErrorHandler defaultDynFlags $ do runGhc (Just libdir) $ do dflags <- getSessionDynFlags setSessionDynFl

我有以下使用GHC API加载模块并获取表达式类型的代码:

typeObjects :: [String] -> [String] -> IO [Type]
typeObjects modules objects = do
  defaultErrorHandler defaultDynFlags $ do
    runGhc (Just libdir) $ do
      dflags <- getSessionDynFlags
      setSessionDynFlags dflags
      targets <- mapM ((flip guessTarget) Nothing) modules
      setTargets targets
      result <- load LoadAllTargets
      case result of
          Failed -> error "Compilation failed"
          Succeeded -> do
            m <- mapM (((flip findModule) Nothing) . mkModuleName) modules
            setContext m []
            values <- mapM exprType objects
            return values

我怎样才能使它不会使程序崩溃?我只想知道哪些表达式类型检查成功,哪些未成功。

您无法处理它-这就像内核“oops”,意味着运行时或编译器处于不一致的状态。将其报告为错误。

如果您设法使编译器崩溃,则是编译器错误。检查这是否是一个已知的错误,否则报告它。我不认为这是一个错误。没错。我试图在运行时编译一个表达式,该表达式试图在需要Int的地方传入字符串。我只想“抓住”那个错误并“标记”那个表达式是失败的,而其他不会造成错误的,我会认为是成功的。@桃树报告错误是正确的行为。用“恐慌!(不可能的事情发生了)”撞车是不正确的行为。将其报告为bug。
TestDynamicLoad: panic! (the 'impossible' happened)
   (GHC version 7.0.3.20110330 for x86_64-unknown-linux):
    Couldn't match expected type `GHC.Types.Int'
            with actual type `[GHC.Types.Char]'