我想编写一个 Haskell 函数,它返回一个附加到自身计数时间的列表(就像lst * count
在 Python 中一样)。
我的第一次尝试是:
self_append_n :: Int -> [a] -> [a]
self_append_n = concat . replicate
我的推理是replicate
接受一个计数和一个值,并产生一个值列表。当值本身是一个列表时,剩下的就是将这些列表连接在一起。但是,这会产生一个令人困惑的错误:
Couldn't match type `[a0]' with `[a] -> [a]'
Expected type: [[a0]] -> [a] -> [a]
Actual type: [[a0]] -> [a0]
In the first argument of `(.)', namely `concat'
In the expression: concat . replicate
In an equation for `self_append_n':
self_append_n = concat . replicate
然后我写了一个有意义的版本:
self_append_n a b = concat $ replicate a b
它有效!
为什么免点版本编译失败,加点就可以了?