2013-04-14 4 views
1

Коды ниже запрограммирован, чтобы решить результат бумаги рок и ножницы в Haskell, однако терминал выдаст ошибкубумага, рок, и ножницы в Haskell

data Move = Paper | Rock | Scissors 
deriving (Eq, Show) 
data Result = Win | Draw | Loose 
    deriving (Eq, Show) 


beats :: Move -> Move 
beats move = case move of 
    Paper -> Scissors 
    Rock -> Paper 
    Scissors -> Rock 

score :: Move -> Move -> Result 
score this_move opposing_move 
    | this_move == beats opposing_move = Win 
    | this_move == opposing_move  = Draw 
    | otherwise = Loose 

здесь сообщение об ошибке от терминала

[1 of 1] Compiling Main    (test.hs, interpreted) 

test.hs:1:60: parse error on input `data' 
Failed, modules loaded: none. 

Кто любит рассказывать мне, что в этом плохого? Спасибо XD

+3

Это не причина вашей ошибки, но противоположность 'Win' написана' Lose'. («Свободное» - правильное написание другого слова). – dave4420

+1

Как вы написали здесь, ваш код работает. Какую операционную систему, текстовый редактор и версию ghc вы используете? Кроме того, вы могли бы найти способ поделиться точным файлом, который вы пытаетесь скомпилировать? Возможно, что-то неточно неверно в том, как оно отформатировано, которое не сохранилось при копировании кода здесь. Дополнительным доказательством этого является то, что при копировании кода первая строка не содержит в ней 60 символов, но в сообщении об ошибке говорится, что проблема связана с 60-м символом первой строки. –

+1

Если первая строка не содержит 60 символов, а сообщение об ошибке - противоположное, я понимаю, что использование символа конца строки в формате файла не является ожидаемым компилятором. Тогда файл обязательно заходит из системы Windows, и он не переформатирован для работы на Mac (как Linux). Вот как я это интерпретирую. – zurgl

ответ

5

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


Используйте этот кусок кода для переформатирования файла.

$ cd /to/your/code.hs 
$ ghci 

и писать,

ghci >let f = readFile "code.hs" 
ghci >do {reencoded <- fmap (filter (/= '\r')) f; writeFile "ncode.hs" reencoded} 

Затем перекомпилировать код.
Сообщите мне, если проблема будет решена.

Как сказано, этого недостаточно, но если вы введете эту инструкцию в ghci.

ghci > readFile "code.hs" 
-- print something 

И вы покажете нам необработанный результат, возможно, это может помочь.

+0

thx для ответа мне, im в настоящее время использует gedit в качестве моего edior на mac, у вас есть какие-либо советы по настройке моего редактора? – libra

+0

Нет, я не знаю никаких проблем с этой конфигурацией. Не могли бы вы загрузить точный файл, который вы пытаетесь скомпилировать? –

+1

Вы на Mac, затем используете vim или gvim, я не могу помочь вам больше рассмотреть инструмент, который вы используете. Взгляните на это http://www.haskell.org/haskellwiki/Vim. Как отметил Нейл, это может быть ссылка на символ эла (windows eol Vs Linux eol приводит к такой проблеме). В любом случае лучшим советом является переход на vim IMO. – zurgl