сегодня я много читал о Haskell, но эта формация сводит меня с ума. Я хочу как можно скорее понять основные ошибки, чтобы нормально начать кодирование. Функция здесь должна возвращать строку, которая начинается со следующей строки «math Sign», строка (2sdwds+asd)+3
должна возвращать +asd)+3
. Вот кодСинтаксис Haskell, ошибки синтаксического анализа для манекенов
getToNextSign :: String -> String
getToNextSign str = do
let mathSigns = ['+' , '-' , '*' , '/' , '^' , ')']
let a = head str
if a `elem` mathSigns
then str
else if tail str /= []
then getToNextSign $ tail str
else []
main = do
putStrLn $ getToNextSign "(2sdwds+asd)+3"
Это дает мне «ошибка разбора на входе =». Я также не уверен, как именно назвать это в основном, и мне действительно нужна функция putStrLn. Я не думаю, что мне это нужно, но я пробовал как 2874 разных способов написать это, и теперь я просто сдался и нуждался в помощи.
Является ли код, который вы разместили здесь точно так же, как он отступом в исходном файле? Похоже на синтаксическую ошибку в отступе. –
2 мелочи, не связанные с вашей ошибкой: вы не должны использовать do-notation, если вы не используете монады, и я бы предпочел использовать функцию из stdlib для выполнения этой задачи (break/span/etc). – hugomg
Да код от 1 до 1. Я знаю, что это, вероятно, от идентификации, но я не могу его найти. Кроме того, @missingno Я думаю, что понимаю, что вы имеете в виду, но, как я уже сказал, я пробовал много разных способов и не мог понять, где ошибка. Я думаю, что не использовал «делать» при моем первом запуске. – user3129475