haskell添加项目列表不起作用

Sky*_*yfe 1 haskell list

我是Haskell的新手,我正在尝试使用:运算符将字符串添加到字符串列表中,但不知怎的,它无法正常工作......此代码正在运行:

sl:(printH header):sl:(map printR t)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在最后添加字符串sl时,如下所示:

sl:(printH header):sl:(map printR t):sl
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误,这对我没有任何意义(sincwe其他连接确实顺利):

Couldn't match type '[Char]' with 'Char'
Expected type: [String] -> Char
  Actual type: [String] -> String
In the first argument of 'map', namely 'printR'
...
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

mas*_*onk 5

Prelude> :type (:)
(:) :: a -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

这告诉您该(:)函数左侧有一个项目,右侧有一个列表.鉴于:

a :: t
b :: t
c :: [t],
Run Code Online (Sandbox Code Playgroud)

a:b:c解析as a:(b:c),这是有效的,因为表达式b:c是类型的[t].同时,b:c:a解析as b:(c:a),它不起作用,因为c:a是错误的类型:a应该是类型[t],但实际上是类型t,并且c应该是类型t,但实际上是类型[t].在你的例子中,tChar.

如果要将单个项添加到列表的末尾,可以使用concatenate (++):

xs ++ [i]