首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >帮助加载Haskell动态插件

帮助加载Haskell动态插件
EN

Stack Overflow用户
提问于 2011-03-25 10:02:33
回答 2查看 2.1K关注 0票数 18

我是一个Haskell初学者,我正在尝试使用'plugins‘包中的动态加载。我有点迷路了。这是一个包含两个文件的最小程序。

Main.hs:

module Main (main) where

import System.Plugins

main :: IO ()
main = do
  putStrLn "Loading"
  mv <- dynload "Plug.o" [] [] "thing"   -- also try 'load' here
  putStrLn "Loaded"
  case mv of
    LoadFailure msgs -> putStrLn "fail" >> print msgs
    LoadSuccess _ v -> putStrLn "success" >> print (v::Integer)

和Plug.hs:

module Plug (thing) where

thing :: Integer
thing = 1234000

我用ghc -c Plug.hs编译Plug,它会生成Plug.o。然后,我使用ghc -o Main Main.hs编译Main.hs,并运行Main。我还尝试用dynload替换load,并使用runhaskell运行。这四种组合中只有一种是有效的。我做错了什么?

  • dynload
    • 一起编译并打印“

”,然后是seg faults

  • runhaskell→打印“

  • ”,然后是"Main.hs: Prelude.undefined“→

  • with load
    • compiled→successful,打印Integer
    • runhaskell→prints "Loading",挂起5-10秒,disappears

我使用的是MacOSX.GHC 7.0.2版。我做错了什么?

谢谢,

抢夺

更新

我可以通过将Plug.hs更改为以下代码来修复已编译的dynload ...

module Plug (thing) where
import Data.Dynamic                                                                                                    
thing :: Dynamic
thing = toDyn (1234000::Integer)

如果它不会在错误中显示错误,那就太好了。我猜它在Plug.o中没有足够的元数据来检查类型。不管怎样,剩下runhaskell的案子了。我为这些东西提交了bug

EN

回答 2

Stack Overflow用户

发布于 2011-03-26 15:23:53

我已经在Ubuntu10.10和GHC6.12.1上测试了你的例子,结果是:无论是编译的还是通过runhaskell运行的dynloadload都会给我一个"Prelude.undefined“错误,所以我认为你应该向开发人员报告一个错误。

我在他们模块的haddock文档中看不到任何特殊情况或条件,所以我不认为您做错了什么。

票数 3
EN

Stack Overflow用户

发布于 2013-01-24 19:51:23

您可能希望查看haskell ghc dynamic compliation only works on first compile.上的GHC-API的类似问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5427777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档