相关疑难解决方法(0)

动态加载已编译的Haskell模块 - GHC 7.6

我正在尝试使用GHC API动态编译和加载Haskell模块.我理解API从一个版本到另一个版本的波动很大,所以我特别谈到GHC 7.6.*.

我试过在MacOS和Linux上运行相同的代码.在这两种情况下,插件模块都可以正常编译,但在加载时会出现以下错误:Cannot add module Plugin to context: not interpreted

问题类似于本文中的问题,只有在主机程序的同一运行中编译模块时才会加载该问题.

-- Host.hs: compile with ghc-7.6.*
-- $ ghc -package ghc -package ghc-paths Host.hs
-- Needs Plugin.hs in the same directory.
module Main where

import GHC
import GHC.Paths ( libdir )
import DynFlags
import Unsafe.Coerce

main :: IO ()
main =
    defaultErrorHandler defaultFatalMessager defaultFlushOut $ do
      result <- runGhc (Just libdir) $ do
        dflags <- getSessionDynFlags
        setSessionDynFlags dflags
        target <- guessTarget "Plugin.hs" Nothing
        setTargets [target]
        r …
Run Code Online (Sandbox Code Playgroud)

haskell ghc ghc-api

12
推荐指数
1
解决办法
1047
查看次数

Haskell GHC API错误中的动态编译

我一直在尝试使用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 …
Run Code Online (Sandbox Code Playgroud)

compiler-construction api haskell dynamic-compilation ghc

7
推荐指数
1
解决办法
382
查看次数