我有一个值列表:
2 0.75
1 0.01
2 1.0
3 0.8
我要查看列表,并希望将这些对分成两个变量。
为了进行测试,我刚尝试将它们打印出来。但是,这给了我一个错误“Prelude.read:no parse”:
getCountProb :: Handle -> IO ()
getCountProb inh = do
countProb <- hGetLine inh
let cp = read countProb :: (Integer, Float)
let test = fst cp
print test
答案 0 :(得分:4)
countProb
为"2 0.75"
,read
无法解析。您可以使用words
将其拆分为两个可解析的段,但会在空格上拆分值。
let [x, y] = words countProb
然后您可以通过逐个阅读来合并到:: (Integer, Float)
。
let cp = (read x, read y) :: (Integer, Float)
或者,相当复杂,您可以使用Text.Printf.printf
将文本格式化为read
可以解析的内容。
let [x, y] = words countProb
fmtd = printf "(%s, %s)" x y
cp = read fmtd :: (Integer, Float)