这可能是一个非常基本的问题,但是......
一个定义为的函数,比如说
foo :: a -> Integer
表示从任何类型到整数的函数。如果是这样,那么理论上应该能够为任何类型定义它,就像这样
foo 1 = 10
foo 5.3 = 100
foo (x:xs) = -1
foo _ = 0
但是 Haskell 只允许一个通用的定义,比如foo a = 0
.
即使您限制a
为某一类类型之一,例如 Show typeclass 的实例:
foo :: (Show a) => a -> Integer
你仍然不能做类似的事情
foo "hello" = 10
foo _ = 0
即使"hello" :: [Char]
是一个实例Show
为什么会有这样的限制?