ここにあるチュートリアルに従って、GHC APIを使用して基本的な動的コードのコンパイルを機能させようとしています。
このコード:
import GHC
import GHC.Paths
import DynFlags
import Unsafe.Coerce
main :: IO ()
main =
defaultErrorHandler defaultDynFlags $ do
func <- runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
setSessionDynFlags dflags
target <- guessTarget "Test.hs" Nothing
addTarget target
r <- load LoadAllTargets
case r of
Failed -> error "Compilation failed"
Succeeded -> do
m <- findModule (mkModuleName "Test") Nothing
setContext [] [m]
value <- compileExpr ("Test.print")
do let value' = (unsafeCoerce value) :: String -> IO ()
return value'
func "Hello"
return ()
Test.hs という別のファイルから印刷機能を取得し、それをロードして印刷機能を実行する必要があります。
次のコマンドを使用して、ghc バージョン 7.4.1 でコードをコンパイルします。
ghc -package ghc --make Api.hs
ただし、次のエラーが表示されます。
Api.hs:8:25:
Couldn't match expected type `Severity' with actual type `Settings'
Expected type: LogAction
Actual type: Settings -> DynFlags
In the first argument of `defaultErrorHandler', namely
`defaultDynFlags'
In the expression: defaultErrorHandler defaultDynFlags
私は何を間違っていますか?私は GHC API のドキュメントを確認しましたが、この種のことのほとんどを理解するには十分に精通していません。