如何处理"恐慌:不可能发生"并继续在Haskell

men*_*ics 7 haskell typechecking dynamic-loading ghc-api

我有以下代码使用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
Run Code Online (Sandbox Code Playgroud)

如果表达式没有进行类型检查,则整个程序崩溃:

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]'
Run Code Online (Sandbox Code Playgroud)

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

Don*_*art 12

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