私はhaskellを学んでいて、現在文字列から整数と浮動小数点数を解析しようとしています。
ただし、「342」または1つ以上の非数字文字を含まない「数値」でreadNum関数を試してみると、ghciから次のように報告されます。
*例外:parse.hs:125:18-46:パターン(i、(a:as))に対して反駁できないパターンが失敗しました
data Token
= IntTok Int | FloatTok Float | EOF
readNum :: String->(Token, String)
readNum [] = (EOF, [])
readNum xs = let (i, (a:as)) = span isDigit xs --This is line 125
in (case a of
('.') -> let (j, (b:c:bs)) = span isDigit as
in (if ((toLower b) == 'e' && (c == '+' || c == '-' || (isDigit c)))
then (let (k, d) = span isDigit bs in (FloatTok (read (concat [i,[a],j, [b],[c],k])::Float), d))
else (FloatTok (read (concat [i,[a],j])::Float), (b:c:bs)))
_ -> (IntTok (read i::Int), (a:as)))
span isDigit xs
タプルの2番目の要素として空のリストを返す場合のケースを処理するためのより良い方法はありますか?
-ありがとう