提示(Language.Haskell.transparer)中两个单元操作的奇怪执行顺序要求

提示(Language.Haskell.transparer)中两个单元操作的奇怪执行顺序要求,haskell,ghc,hint,side-effects,Haskell,Ghc,Hint,Side Effects,在底部的代码中,Hint(Language.Haskell.解释器)中的两个一元操作(loadModules和setImportsQ)只能按一个顺序执行,而不能按另一个顺序执行,如下面的最小示例所示。特别是,loadModules必须先执行,否则在执行解释器时将生成以下异常 *** Exception: compile error: WontCompile [GhcError {errMsg = "Not in scope: type constructor or class `Int'"}]

在底部的代码中,Hint(Language.Haskell.解释器)中的两个一元操作(
loadModules
setImportsQ
)只能按一个顺序执行,而不能按另一个顺序执行,如下面的最小示例所示。特别是,
loadModules
必须先执行,否则在执行解释器时将生成以下异常

*** Exception: compile error: WontCompile [GhcError {errMsg = "Not in scope: type
 constructor or class `Int'"}]
此行为似乎已在
提示0.4.1.0
中引入。我一定错过了什么明显的东西

我的第一个问题是特定于提示的:为什么必须在
setImportsQ
之前调用
loadModules

我的第二个问题更一般:这两个一元操作似乎没有相互输入,而且要加载的模块是空的,为什么顺序或执行很重要?这几乎让我想起了命令式世界,在那里你不仅要担心输入/输出,还要担心某些副作用的顺序

代码如下。请注意,
MyModule.hs
是一个空的.hs文件

module Main where

import Language.Haskell.Interpreter
import Control.Monad

custom=["MyModule"] --mymodule.hs is just an empty .hs source file in the same folder
context=[("Data.Int",Nothing)]

main = do
  x <- interp ("1") (as ::Int)
  return ()

interp e as_type = do
  interpreterResult <- runInterpreter $ do
     loadModules custom     --this line must go first
     setImportsQ context    --this line must go second
     interpret e as_type
  f <- case interpreterResult of
        Left e -> error $ "compile error: " ++ show e
        Right result -> return result
  return f
modulemain其中
导入Language.Haskell.Interpreter
进口管制
custom=[“MyModule”]--MyModule.hs只是同一文件夹中的一个空.hs源文件
上下文=[(“Data.Int”,无任何内容)]
main=do
x