在Haskell中进行开发时查看非公开的库函数

时间:2016-08-28 16:55:55

标签: haskell development-environment

我犯了一个错误in another question,可以通过查看

来解决
:t myfunctionofinterest

我在库中使用的函数。

但是,当我在项目根目录中时,运行

$ stack ghci

我的Main.hs有:

import MyLib

我的模块确实:

module MyLib {
  bunchOfFunctions -- but not myfunctionofinterest
} where

import SomeDB.ModuleThatExposes -- myfunctionofinterest

myfunc :: IO ()
myfunc = do
  myfunctionofinterest a b c -- place where I misuse myfunctionofinterest and could have used :t on it to see it had 3 args

我无法:t我的主要感兴趣,因为它没有暴露,Import MyLib.myfunctionofinterest也没有明确 帮助,因为它是导入中定义的东西。虽然我知道我可以公开它然后检查它,:a进行编译,然后编辑lib再次隐藏它,是否有更快更直接的东西?

这似乎必须是一种常见的模式。当你开发时需要检查库中使用的东西类型时你会怎么做?

1 个答案:

答案 0 :(得分:6)

引用GHCi docs

  

:module命令提供了一种方法来执行普通导入声明无法完成的两件事:

     
      
  • :module支持模块上的*修饰符,它会打开模块的完整顶级范围,而不仅仅是其导出。
  •   

附加*使GHCi加载模块的字节码版本。这样做效率不高,但您可以访问未导出的绑定。

示例:

λ> :m *MyLib
λ> :t myfunctionofinterest

如果你得到

module 'MyLib' is not interpreted; try ':add *MyLib' first

你可能必须先:load(关于:add的建议并不总是这样做):

λ> :l *MyLib
λ> :m *MyLib
λ> :t myfunctionofinterest