繁体   English   中英

ghc-mod的开关组件

[英]switching component for ghc-mod

我有一个项目,其主要的cabal组件是一个库

library
  hs-source-dirs:      src
  ...

并且还定义了

executable todo
   if !flag(example)
        Buildable: False
   ghc-options: -Wall
   cpp-options: -DGHCJS_BROWSER

   default-language: Haskell2010
   hs-source-dirs: example/todo
   other-modules: TodoDispatcher
                  TodoStore
                  TodoComponents


   main-is: Main.hs

现在,如果我尝试键入检查一个文件,我会收到以下错误

Configuring react-flux-1.0.3...
EXCEPTION: types:
           Could not find module ‘TodoDispatcher’
           Use -v to see a list of the files searched for.

如果我从命令行这样做,我得到

 $ ghc-mod  --ghcOpt=-v7 type example/todo/TodoViews.hs 29 28                                            not sandboxed
EXCEPTION: types:
           Could not find module ‘TodoDispatcher’
           Locations searched:
             .stack-work/dist/x86_64-osx/Cabal-1.22.8.0/build/TodoDispatcher.hs
             .stack-work/dist/x86_64-osx/Cabal-1.22.8.0/build/TodoDispatcher.lhs
             .stack-work/dist/x86_64-osx/Cabal-1.22.8.0/build/TodoDispatcher.hsig
             .stack-work/dist/x86_64-osx/Cabal-1.22.8.0/build/TodoDispatcher.lhsig
             src/TodoDispatcher.hs
             src/TodoDispatcher.lhs
             src/TodoDispatcher.hsig
             src/TodoDispatcher.lhsig
             .stack-work/dist/x86_64-osx/Cabal-1.22.8.0/build/autogen/TodoDispatcher.hs
             .stack-work/dist/x86_64-osx/Cabal-1.22.8.0/build/autogen/TodoDispatcher.lhs
             .stack-work/dist/x86_64-osx/Cabal-1.22.8.0/build/autogen/TodoDispatcher.hsig
             .stack-work/dist/x86_64-osx/Cabal-1.22.8.0/build/autogen/TodoDispatcher.lhsig

所以它似乎忽略了我尝试使用类型检查的当前文件属于的组件的hs-source-dirs设置,而是考虑了包中第一个组件的那个,就像cabal repl默认做的那样

By default cabal repl loads the first component in a package.

我怎样才能改变全局状态呢?

好的,所以这是你应该做的,以使这个工作:

  • 您需要编辑cabal文件并将组件的标志更改为

     `Buildable : True` 
  • 然后,您可以键入check

      $ ghc-mod --ghcOpt=-v7 type example/todo/TodoViews.hs 29 28 not sandboxed 29 24 29 34 "[Char]" 27 25 33 12 "TextInputArgs" 27 9 33 12 "ReactElementM [ 

在Emacs中:

  • 你可能需要退出Emacs

  • 你需要打开你的文件和haskell-process-load-file (又名Cc Cl,又名Space msb)

它应该加载了正确的“目标”,这是cabal中“组件”的haskell模式说法。 如果那样有效,那么ghc-mod也应该。 (?)

http://haskell.github.io/haskell-mode/manual/latest/Interactive-Haskell.html

14.8.1更改REPL目标

使用haskell-session-change-target,您可以更改REPL会话的目标。

在REPL会话开始后,在haskell-interactive-mode缓冲区中调用haskell-session-change-target并从可用目标中选择

  • 测试
  • 基准
  • 可执行文件
  • 图书馆

回答“是”以重新启动会话并运行测试,基准测试,可执行文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM