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