我有一个字符串,例如2.7+i*3.4
。我想解析这个字符串并得到Complex number
对象。我试着这样做:
newtype MyComplexNumber = MyComplexNumber (Complex Float)
myReadsCmplx s = [(MyComplexNumber (a :+ b)) |
(a, '+':r1) <- reads s :: [(Float, String)],
(i, '*':r2) <- reads r1 :: [(String, String)],
(b, r3) <- reads r2 :: [(Float, String)]]
但我有空列表:
*Main Data.Complex> myReadsCmplx "2.7+i*3.4"
[]
*Main Data.Complex>
答案 0 :(得分:1)
您似乎正在使用reads
,就像它是一个完整的monadic解析器一样。不是。它会出现一个匹配或没有匹配,如果它找到的匹配与你的模式不匹配,你会得到nada。使用parsec
,attoparsec
或甚至像regex-applicative
这样超简单的东西,你会好得多。