Получение исходных файлов для запуска в Haskell Programming (WinGHCi)

Я не могу понять, как заставить WinGHCi загрузить и скомпилировать мой файл .hs.

У меня есть файл C:\Users\Haskell\Source\hello.hs, содержащий только следующую строку:

main = putStrLn "Hello, world!"

Если в приглашении Prelude> я запускаю

:cd C:\Users\Haskell\Source\

ничего не происходит, что, как я предполагаю, означает, что команда была успешной. Однако, когда я пытаюсь запустить

:load hello.hs

Я получаю сообщение «[1 из 1] Compiling Main. Ok, модули загружены: Main». Затем мое приглашение меняется с «Prelude» на «*Main», и я набираю:

ghc -o hello hello.hs

После этого я получу серию ошибок, говорящих о том, что ghc, o, hello, hello и hs «не входят в область действия».

Я в правильном каталоге. Почему моя программа не запускается?

Одна из моих проблем заключается в том, что я не могу перемещаться по каталогам. Я знаю, что :!dir перечисляет файлы, и я нахожусь в правильном каталоге, но :load hello.hs по-прежнему не работает, и я продолжаю получать ошибку области.

Любая помощь будет оценена по достоинству.

РЕДАКТИРОВАТЬ: пользователь указал, что если я получил приглашение *Main, то моя программа была загружена и скомпилирована, и мне не нужно запускать команду ghc. Если это так, как бы я его запускал? Haskell.org заявляет, что «затем вы можете запустить исполняемый файл (./hello в системах Unix, hello.exe в Windows)», но исполняемый файл не был создан.


person Joffrey Baratheon    schedule 25.12.2014    source источник
comment
Я предполагаю, что GHCi успешно загрузил исходный файл и выдал ошибку, потому что в исходном файле есть ошибка. Было бы полезно, если бы вы разместили hello.hs.   -  person snak    schedule 25.12.2014
comment
Содержимое hello.hs: main = putStrLn Привет, мир!   -  person Joffrey Baratheon    schedule 25.12.2014
comment
@JoffreyBaratheon Я добавил информацию из вашего последнего комментария в ваш вопрос. В будущем нажмите «Изменить» под своим вопросом, чтобы отредактировать свой вопрос и добавить такую ​​​​информацию самостоятельно. У вас будет больше шансов получить хороший ответ, если вы сделаете свои вопросы автономными.   -  person jub0bs    schedule 25.12.2014
comment
Спасибо, Джуббс. Я ценю помощь.   -  person Joffrey Baratheon    schedule 25.12.2014
comment
Преимущество ghci в том, что вы можете использовать любую функцию из вашего файла или его импорта, поэтому, если вы поместите fibs = 1:1:zipWith (+) fibs (tail fibs) в hello.hs, а затем в ghci наберете take 20 fibs, вы увидите первые 20 чисел Фибоначчи. перед вашими глазами. Вам не нужно ограничивать себя вводом main.   -  person AndrewC    schedule 25.12.2014


Ответы (1)


Мне проще сначала перейти в каталог, а затем вызвать ghci. В Prelude вы можете использовать :l и имя файла.

Или вы можете загрузить ghci, затем использовать :l и указать полный путь к файлу.

Редактировать. После прочтения ваших правок становится ясно, что ваш код компилируется нормально. Как только он сообщает, что скомпилирован, нет причин пытаться сделать это снова с помощью ghc (я все равно не думаю, что вы можете сделать это из ghci).

Теперь, когда он скомпилирован, вы можете использовать любой из определенных там кодов и типов данных. Итак, чтобы использовать вашу основную функцию, просто введите main в приглашении *Main>.

person Andrew Monshizadeh    schedule 25.12.2014
comment
Итак, я сделал то, что вы сказали о переходе к исходному файлу в cmd, а затем загрузил ghci. Я делаю: Prelude› :l hello.hs, а затем *Main› ghc -o hello hello.hs И все равно попадаю не в рамки. - person Joffrey Baratheon; 25.12.2014
comment
Когда он переключает подсказку на Main, это должно означать, что ваш файл загружен и скомпилирован. Таким образом, не должно быть необходимости пытаться выполнить ghc. Просто используйте функции и типы данных, определенные в вашем файле. - person Andrew Monshizadeh; 25.12.2014
comment
Если вы говорите, что он уже скомпилирован, как мне его запустить? Haskell.org говорит: «Затем вы можете запустить исполняемый файл (./hello в системах Unix, hello.exe в Windows). Если я наберу hello.exe, это не сработает. Я чувствую себя действительно глупым прямо сейчас, лол. - person Joffrey Baratheon; 25.12.2014
comment
Вы используете ghci, который является REPL. Если вам нужен .exe, вам нужно просто использовать команду ghc. ghci для интерактивной разработки, а ghc для обычной компиляции. - person Andrew Monshizadeh; 25.12.2014
comment
Спасибо за помощь, я ОЧЕНЬ ценю это! Это сработало! С праздником Вас и всех откликнувшихся! - person Joffrey Baratheon; 25.12.2014
comment
@JoffreyBaratheon Если ответ Эндрю решил вашу проблему, подумайте о том, чтобы проголосовать за него (щелкнув стрелку вверх слева) и принять его (щелкнув галочку). Частью идеи этого сайта является выявление хороших вопросов и ответов посредством голосования и принятия ответов. - person jub0bs; 25.12.2014