小编use*_*230的帖子

为什么Haskell中不允许同时使用所有类型的函数定义?

这可能是一个非常基本的问题,但......

一个被定义为的函数

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

为什么会有这样的限制?

haskell type-systems

23
推荐指数
5
解决办法
1296
查看次数

标签 统计

haskell ×1

type-systems ×1