在我看来,类型参数a
可以是任何东西,包括列表。为什么这行不通?
fun :: a -> a
fun [] = []
Haskell 不想编译这段代码。我想知道为什么。
Couldn't match expected type `a' with actual type `[t0]'
`a' is a rigid type variable bound by
the type signature for fun :: a -> a
我可以让它像这样重写签名
fun :: [a] -> [a]
但这不是我要寻找的东西,因为我想保持函数的多态性。我想知道如何id
在空列表上工作。
Prelude> :t id
id :: a -> a
Prelude> id []
[]