1

カバルの主要コンポーネントがライブラリであるプロジェクトがあります

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

1つのファイルをタイプチェックしようとすると、次のエラーが表示されます

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.

どうすればグローバル状態の素晴らしいビットを変更できますか?

4

1 に答える 1

0

これを機能させるには、次のことを行う必要があります。

  • 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 を呼び出し、使用可能なターゲットから選択します

  • テスト
  • 基準
  • 実行可能
  • としょうかん

「はい」と答えてセッションを再開し、テスト、ベンチマーク、実行可能ファイルを実行します。

于 2016-05-24T14:20:03.403 に答える