Интерфейс Emacs haskell, импорт не может найти модуль - PullRequest
0 голосов
/ 26 мая 2018

Редактировать: эта ошибка возникает только при использовании режима 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.)

Появляется то же сообщениепри использовании 'Cc Cl' для загрузки в 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, но пока не могу найти какое-либо доступное решение.

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

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

С помощью ответа Кранца и еще одного прочтения проблема решается путем создания нового проекта со стеком, чтобы intero знал местоположение моих исходных файлов.Таким образом, эта проблема вызвана тем, что intero не знает, где искать локальные модули в intero-global-mode в emacs.Здесь я напишу свой собственный ответ, чтобы немного расширить ответ Krantz и документировать процесс решения этой проблемы как новичка в 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.

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

0 голосов
/ 27 мая 2018

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

...