++和:如何在Haskell中互换使用?

时间:2013-10-19 19:07:40

标签: haskell

我读到cons运算符(:)和++运算符可以在Haskell字符串中互换使用。如何才能做到这一点?我不确定我完全理解这意味着什么。

编辑:这是我认为它应该是:

x:xs = [x]++xs

[]++list = list

(x:xs)++list = x:(xs++list)

2 个答案:

答案 0 :(得分:6)

(:)是列表类型的构造函数。这是一个规则的特殊情况,我们可以使用中缀构造函数,只要它们以冒号开头:

Prelude> :info []
data [] a = [] | a : [a]    -- Defined in `GHC.Types'
(++)而言,

(:)是一个简单implemented的函数:

Prelude> :info (++)
(++) :: [a] -> [a] -> [a]   -- Defined in `GHC.Base'
infixr 5 ++

正如您所看到的那些类型不同:

Prelude> :t (:)
(:) :: a -> [a] -> [a]
Prelude> :t (++)
(++) :: [a] -> [a] -> [a]

上面我使用了hoogle(以及在haddock docs中链接的实现)和GHCi的:t:info命令,现在你也可以使用!

答案 1 :(得分:2)

x:xs = [x]++xs

[]++list = list

(x:xs)++list = x:(xs++list)