我正在学习函数式编程的入门课程,我们使用Haskell.练习的一部分是为输入字符串编写解析器.
但是我无法解决以下错误,或者得到实际发生的情况.
Parser.hs:29:71:
Couldn't match expected type `String' with actual type `Char'
In the first argument of `readPoint', namely `start'
In the expression: readPoint start
In the expression:
(readLines track, readPoint start, readLine finish)
Run Code Online (Sandbox Code Playgroud)
错误源自此行:
readTrack str = parseTrack (lines str) where
parseTrack (start : finish : track) = (readLines track, readPoint start, readLine finish)
Run Code Online (Sandbox Code Playgroud)
我期望发生的是输入字符串被拆分成一个行列表,然后传递给parseTrack.然后,parseTrack将使用模式匹配来命名列表中的前两个字符串(行)以及其余的字符串.
然而,我认为正在发生的是,finish是列表中的顶级元素,并且start从该字符串分配了顶部char.
我真的很想知道如何解决这个问题以及实际发生的事情.
非常感谢!
Parser.hs
module Parser where
import Types
readFloat :: String -> Float
readFloat str = case reads str of
[] -> error …Run Code Online (Sandbox Code Playgroud)