在Haskell中查找函数源(工作流)
我正在学习Haskell一段时间,所以我决定检查一些受欢迎的项目,以感受它在现实中的外观,并可能对该过程进行逆向工程。
我选择了Hakyll,因为它做了我熟悉的事情,并且适度复杂。 然后我马上回答了这个问题:如何回溯进口?
说,在JavaScript中,每个导入都是明确的。
let Q = require("Q") // namespace
let {foo} = require("Q/foo") // value
Haskell默认为
import Q
这一次破坏了一切,人们似乎真的会滥用它。
现在我看看教程,然后在源文件中,意识到我不知道在哪里找到一个或另一个函数,也不知道如何发现它,除了搜索。
是否有一些技巧来发现这种信息,如制作语法错误,这将显示源文件或其他? 你如何解决你的工作流程中的这些任务?
一些不需要编译代码的选项:
我推荐Stackage的hoogle,因为它的数据库加载了所有的Stackage。
如果你有工作代码:
:i
命令 作为最后两个选项的例子,假设你有一个模块Foo.hs
,它看起来像:
module Foo where
import Data.Maybe
...
使用ghci
:
$ ghci Foo.hs
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
[1 of 1] Compiling Foo ( Foo.hs, interpreted )
Ok, modules loaded: Foo.
*Foo> :i catMaybes
catMaybes :: [Maybe a] -> [a] -- Defined in ‘Data.Maybe’
*Foo>
使用ghc-mod
:
$ ghc-mod info Foo.hs catMaybes
catMaybes :: [Maybe a] -> [a] -- Defined in ‘Data.Maybe’
$
如果您使用Intero for Emacs,则它支持M-.
的标准“定义”快捷键M-.
。
其他Intero前端也可能使用其编辑器的标准UI来实现此功能; 我知道这里有一个NeoVim前端。
如果你想在vim中使用这种Haskell代码浏览支持,你可以在2016年尝试Stephen Diehl的漂亮教程Vim和Haskell。
Haskell有多种编辑环境,允许您查询GHC编译器以获取有关代码的信息。 例如,我使用vim-hdevtools,我可以在vim中打开hakyll/src/Hakyll/Main.hs
文件,将光标移动到Commands.build
符号上,输入命令:HdevtoolsInfo
,然后GHC会告诉我类型的符号和它的定义,并给我跳转到定义的选项。
Commands.build ::
Config.Configuration -> Logger.Logger -> Rules a -> IO ExitCode
-- Defined at hackyll/src/Hakyll/Commands.hs:48:1
但是,我承认我花了很多时间让vim-hdevtools工作。
链接地址: http://www.djcxy.com/p/80779.html上一篇: Find function source in Haskell (workflow)
下一篇: Is there a nice way to make function signatures more informative in Haskell?