Cabals Paths_*-Module 和 Emacs 的 haskell-mode

3

假设有一个Cabal项目,其中包含一个数据文件和一个想要读取它的函数。

来自项目p的函数f大致执行以下操作:

module F where

import Paths_p

f = getDataFileName "datafile.dat" >>= readFile

在这个文件中,emacs haskell-mode将导入标记为错误。该文件中可能存在的其他任何错误或警告都不会被标记。

有没有办法使 haskell-mode 认识模块 Paths_p


据我所知,Haskell模式本身不包括任何语法检查。您是否使用ghc-mod或hdevtools? - bennofs
据我所知,我的设置中有flymake-haskell用于语法检查和ghc-mod用于自动完成。我刚刚转换到了emacs,对eLisp和其他emacs相关的东西并不是很了解或理解... - NobbZ
1个回答

0

只需创建一个名为 Paths_p.hs 的文件,并适当定义 getDataFileName


现在手头没有编译器,但如果您只是执行 cabal install 呢? - MigMit
你不需要虚假的文件。如果你至少构建了一次你的项目,你只需要将 dist/build/autogen/ 添加到导入搜索路径中即可。 - bennofs
@MigMit:使用build或install都没有关系,因为install只是调用build,然后将文件复制到沙盒/ cabal-dir。 - NobbZ
@bennofs:好的,但是具体怎么做呢?如果我在emacs中打开模块Something.As.Example,我必须向上2个目录才能将路径应用于dist-build。如果我有专门的src-dir,那就多了一层...由于emacs不知道项目,唯一的方法就是全局添加每个单独cabal项目的autogen-dir,这也没有太多意义... - NobbZ
1
不,我没有。我只是在源代码根目录下创建了它,并将getDataFileNameversion设置为undefined,并为函数提供了适当的类型。目前,我通过在.emacs文件中使用ghc-ghc-options将我的项目的自动生成目录添加到包含路径中,但如果我能删除这些行,我会非常高兴,因为手动维护这样的列表每次启动新项目,删除某些项目或尝试贡献给一些开源项目都很丑陋... - NobbZ
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接