Переключающий компонент для GHC-мод
У меня есть проект, основным компонентом которого является библиотека
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
Теперь, если я пытаюсь набрать команду check one file, я получаю следующую ошибку
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.
Как я могу изменить этот приятный кусочек глобального состояния?
1 ответ
Итак, вот что вы должны сделать, чтобы заставить это работать:
Вам нужно отредактировать файл cabal и изменить флаг компонента на
`Buildable : True`
Затем вы можете проверить тип
$ 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 m s b)
Он должен был загрузить правильную "цель", то есть на языке haskell для "компонента" в cabal. Если это работает, то 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 и выберите одну из доступных целей для
- тестирование
- эталонный тест
- исполнимый
- Библиотека
Ответьте "да", чтобы перезапустить сеанс и запустить свои тесты, тесты, исполняемые файлы.