ユーザーが文字列のリストを入力できるようにする関数を作成しようとしています。この関数は長さを受け取り、ユーザーが length-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
行は文字列型です。
readLn は解析エラーを返します。