Ошибка загрузки функции из файла в GHCi - PullRequest
6 голосов
/ 12 октября 2011

Я совершенно новичок в Хаскеле.Чтобы понять основы, я начал работать над «Изучу тебя на Haskell для хорошего блага».Я застрял в простом вопросе загрузки функции из файла.

Файл называется baby.hs и содержит функцию

doubleMe x = x + x

и ничего больше.Я сохранил его в /Users/me.

Набрав :load baby в GHCi, я получаю следующую ошибку:

target `baby 'не является именем модуля или источникомфайл.

Я работаю на Mac, и я создал свой файл baby.hs, используя набор TextEdit для создания простого текста / файла UTF-8.Я думаю, что мой домашний каталог /Users/me, хотя я не уверен, как это проверить с помощью GHCi, это происходит с того момента, когда я проверяю bash перед запуском GHCi.

Есть идеи, что я делаю неправильно?

Ответы [ 5 ]

4 голосов
/ 12 октября 2011

Как подсказывает @clintm, сначала исправьте функцию doubleMe. То, что у вас есть, приведет к ошибкам, но не к ошибкам, о которых вы сообщаете.

Самый простой способ получить ghci для поиска вашего файла - убедиться, что вы запускаете ghci из того же каталога, в котором сохранен ваш файл. Откройте окно терминала и введите

cd /Users/me
ls

ls перечисляет содержимое текущего каталога; Вы должны увидеть свой файл. Если вы делаете, отлично! Введите ghci в командной строке bash, и :load baby должно работать. Если нет, то вы не сохранили свой файл там, где, как вы думаете, у вас есть. Вернитесь в TextEdit или используйте Spotlight, чтобы увидеть, где вы его действительно разместили.

2 голосов
/ 12 октября 2011

Попробуйте использовать полный путь, например:

:load /Users/me/baby.hs

Вы также должны иметь возможность использовать относительные пути.Попробуйте перейти к каталогу, в котором baby.hs находится первым:

% cd /Users/me
% ghci
GHCi blah blah blah
Prelude> :load baby.hs

Когда вы все заработаете, попробуйте отключить .hs.Я не уверен на 100%, при каких обстоятельствах это работает.

2 голосов
/ 12 октября 2011

Вам не хватает строки модуля.Первая строка файла baby.hs должна быть

module Baby where

Что касается doubleMe, то вы упускаете возможность объявить x в качестве аргумента функции.В противном случае ваша функция не знает, что такое x.

0 голосов
/ 06 марта 2019

Попробуйте открыть текстовый файл с помощью GHCi, затем введите команду, и она работает

0 голосов
/ 21 апреля 2013

@ Алек: «Проблема заключалась в том, что файл действительно назывался baby.hs.txt, но я не заметил этого, поскольку Finder по какой-то причине скрыл часть .txt.»

Вы можете обойти этоэто в TextEdit ...

  • выберите файл baby.hs.txt

  • коснитесь его двумя пальцами, чтобы открыть контекстное меню

  • выберите Get Info, чтобы открыть диалоговое окно Info файла

  • введите baby.hs в области имени и расширения

  • закрыть диалоговое окно Info

  • другое диалоговое окно спросит, действительно ли вы хотите расширение .hs

  • подтвердить, что вы делаете, и вы 'все хорошо

...