小编Tim*_*jer的帖子

来自Haskell中[String]的模式匹配

我正在学习函数式编程的入门课程,我们使用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)

haskell list

4
推荐指数
1
解决办法
1435
查看次数

标签 统计

haskell ×1

list ×1