Режим Emacs haskell intero, импорт не может найти модуль

Изменить: эта ошибка возникает только при использовании режима emacs haskell и режима intero (C-c C-l для загрузки в ghci). Он работает в командной строке, используя stack ghc Log.hs LogAnalysis.hs.

Я изучаю Haskell по CIS 194 (весна 2013 г.) и сталкиваюсь с этой проблемой при выполнении домашнее задание 2. Папка с домашним заданием очень проста:

homework2
|-- LogAnalysis.hs
|-- Log.hs
|-- error.log
|-- sample.log

Некоторые типы данных определены в Log.hs, и их нужно импортировать в LogAnalysis.hs, над которым мне нужно работать. Первые несколько строк в LogAnalysis.hs выглядят так:

{-# OPTIONS_GHC -Wall #-}
module LogAnalysis where

import Log

-- Exercise 1: parse an individual message
...

Однако я получил сообщение об ошибке, подобное этому, в моем emacs, использующем режим haskell с intero:

error:
    Could not find module 'Log'
    Use -v to see a list of the files searched for.

(Hit 'C-c C-r' in the Haskell buffer to apply suggestions.)

Такое же сообщение появляется при использовании «C-c C-l» для загрузки в ghci в emacs.

Но эта ошибка не появляется при загрузке LogAnalysis.hs в командной строке с использованием stack ghci, вместо этого появляется сообщение:

Prelude> :l LogAnalysis.hs
[1 of 2] Compiling Log              ( Log.hs, interpreted )
[2 of 2] Compiling LogAnalysis      ( LogAnalysis.hs, interpreted )
Ok, two modules loaded.
*LogAnalysis>

Итак, я предполагаю, что эта ошибка как-то связана с настройкой моего emacs режима haskell и режима intero, но пока не нашел доступного решения.

Спасибо, что прочитали этот вопрос, ваша помощь будет оценена по достоинству!


person timokratia    schedule 26.05.2018    source источник
comment
Как вы это скомпилируете? Вам нужно добавить файл Log.hs при компиляции, поэтому ghc Log.hs LogAnalysis.hs.   -  person Willem Van Onsem    schedule 26.05.2018
comment
Willem Van Onsem Я могу скомпилировать с помощью stack ghc Log.hs LogAnalysis.hs в командной строке, эта ошибка возникает только в моем текущем рабочий процесс с использованием режима emacs haskell и режима intero при использовании C-c C-l. Правильно ли это?   -  person timokratia    schedule 26.05.2018


Ответы (2)


Кажется, что intero нужны package.yaml и stack.yaml, чтобы найти ваши исходные файлы. Вы можете просто запустить stack init или stack new для автоматического создания этих файлов проекта.
Я сталкивался с этой проблемой несколько раз. Вышеупомянутый метод решил мою проблему на моих Windows и Fedora, поэтому я надеюсь, что это поможет вам.

person Ruifeng Xie    schedule 27.05.2018
comment
Спасибо и принято в качестве ответа. Я также записал процесс решения как свой собственный ответ, чтобы немного расширить ваш. Ваше здоровье :) - person timokratia; 27.05.2018

С помощью ответа Кранца и еще нескольких чтений проблема решается путем создания нового проекта со стеком, чтобы Intero знал расположение моих исходных файлов. Таким образом, эта проблема вызвана тем, что intero не знает, где искать локальные модули, находясь в intero-global-mode в emacs. Здесь я напишу свой собственный ответ, чтобы немного расширить ответ Кранца и задокументировать процесс решения эта проблема как новичок в Haskell:

Чтобы intero мог импортировать локальные модули, мы должны избегать использования intero-global-mode и вместо этого создавать локальный проект (что, на мой взгляд, имеет больше смысла).

Итак, в случае с этим домашним заданием 2 вместо перемещения файлов в папку с домашним заданием, как описано в вопросе, я stack new homework2 перемещу исходные файлы в homework2\src. Затем при использовании emacs для загрузки LogAnalysis.hs вместо этого предыдущего сообщения я получил *intero:global-project::repl*:

Loaded GHCi configuration from /Users/[username]/.stack/global-project/.stack-work/intero/intero-[script]

и сообщение об ошибке при загрузке LogAnalysis.hs, теперь я могу получить:

Loaded GHCi configuration from /path/to/homework2/.stack-work/intero/intero-[script]

в *intero:homework2:homework2:repl*. И использование C-c C-l для загрузки LogAnalysis.hs теперь получает:

[2 of 2] Compiling LogAnalysis      ( /path/to/homework2/src/LogAnalysis.hs, interpreted ) [flags changed]
Ok, two modules loaded.

Итак, проблема решена.

person timokratia    schedule 27.05.2018