在 Haskell 中开发时查看未公开的库函数
View non-exposed library functions while developing in Haskell
我犯了一个错误 可以通过查看
来解决
: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
myfunctionofinterest 在 main 中,因为它没有公开,Import MyLib.myfunctionofinterest
也没有明确公开
帮助,因为它是在导入中定义的。虽然我知道我可以公开它然后检查它,:a
进行编译,然后编辑 lib 以再次隐藏它,但有什么可以更快更直接地做到这一点吗?
这似乎是一个常见的模式。当您在开发过程中需要检查库中使用的东西的类型时,您会怎么做?
引用 GHCi docs:
The :module
command provides a way to do two things that cannot be done with ordinary import declarations:
:module
supports the *
modifier on modules, which opens the full top-level scope of a module, rather than just its exports.
额外的 *
使 GHCi 加载模块的字节码版本。这不会那么高效,但您将可以访问未导出的绑定。
示例:
λ> :m *MyLib
λ> :t myfunctionofinterest
如果你得到
module 'MyLib' is not interpreted; try ':add *MyLib' first
你可能必须先做 :load
(关于 :add
的建议并不总能奏效):
λ> :l *MyLib
λ> :m *MyLib
λ> :t myfunctionofinterest
我犯了一个错误
: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
myfunctionofinterest 在 main 中,因为它没有公开,Import MyLib.myfunctionofinterest
也没有明确公开
帮助,因为它是在导入中定义的。虽然我知道我可以公开它然后检查它,:a
进行编译,然后编辑 lib 以再次隐藏它,但有什么可以更快更直接地做到这一点吗?
这似乎是一个常见的模式。当您在开发过程中需要检查库中使用的东西的类型时,您会怎么做?
引用 GHCi docs:
The
:module
command provides a way to do two things that cannot be done with ordinary import declarations:
:module
supports the*
modifier on modules, which opens the full top-level scope of a module, rather than just its exports.
额外的 *
使 GHCi 加载模块的字节码版本。这不会那么高效,但您将可以访问未导出的绑定。
示例:
λ> :m *MyLib
λ> :t myfunctionofinterest
如果你得到
module 'MyLib' is not interpreted; try ':add *MyLib' first
你可能必须先做 :load
(关于 :add
的建议并不总能奏效):
λ> :l *MyLib
λ> :m *MyLib
λ> :t myfunctionofinterest