gdr*_*les 3 io recursion haskell
我有代码:
read :: IO [Line]
read = do
line <- getLine
let count = length line
line2 <- getLine
if (length line2 /= count)
then error "too long or too short"
else read
Run Code Online (Sandbox Code Playgroud)
我想要做的是,基于第一行的长度,用户必须输入长度为1的行,如果这些行中的任何行与原始行的长度不同,则将显示错误消息.
现在我的代码只是一个无限循环,因为我无法弄清楚如何输入长度为1的行.对此的一些指导将不胜感激.
编辑:行的类型为String
您可以使用replicateM一定次数复制操作并收集结果.在你的情况下,动作是抓取一条线,测试它的长度,如果它无效则出错.所以你可以使用类似下面的东西来完成你的工作:
import Control.Monad (replicateM)
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
Run Code Online (Sandbox Code Playgroud)