我试图创建一个允许用户输入字符串列表的函数。该函数获取长度并允许用户输入长度为1的线。然后检查每一行以确保它与原始行的长度相同。但是,我遇到了一些问题,并且找不到解决方案。例如,如果我输入[“12”,“13”],然后输入[“121”],那么输入的行数就会大于count-1行, ,“13”]给出了错误,尽管它们的长度相同!Haskell ReplicateM IO
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
行是字符串类型。
readLn给出了一个分析错误。
您的代码对我来说工作正常(除了if-then-else块的缩进问题)。 – 2012-03-12 11:24:20
作为澄清,第一行输入意味着是一个数字,告诉你有多少其他线?或者这个数字实际上是基于你写在这里的第一行的长度(字符数)? – huon 2012-03-12 11:25:46
字符串'[“12”,“13”]和'[“121”,“13”]'不具有相同的长度。后者比第一个字符多一个字符。你想阅读字符串或字符串列表吗? – danr 2012-03-12 11:29:07