Я пытаюсь создать функцию, которая позволяет пользователю вводить список строк. Функция принимает длину и позволяет пользователю ввести длину еще на 1 строку. Затем каждая строка проверяется, чтобы убедиться, что она имеет ту же длину, что и исходная строка. Однако у меня есть несколько проблем, и я не могу найти решение.
Проблема в том, что я могу ввести больше строк, чем count-1, и длина вычисляется не так, как я ожидал. Например, если я ввожу ["12", "13"], а затем ["121", "13" ] выдается ошибка, хотя они одинаковой длины!
read :: IO [Line]
read = do
line <- getLine
let count = length line
lines <- replicateM (count-1) $ do
line <- getLine
if length line /= count
then fail "too long or too short"
else return line
return $ line : lines
Строка имеет тип String.
readLn выдает ошибку синтаксического анализа.
["12","13"]
и["121","13"]
имеют разную длину; у последнего на один символ больше, чем у первого. Вы хотите читать строки или списки строк? - person danr   schedule 12.03.2012getLine
вы получаетеString
, поэтому длина — это количество символов в строке. Чтобы попробовать это в ghci, попробуйтеlength (show ["12","13"])
. - person danr   schedule 12.03.2012