我正在学习Haskell,我不明白为什么我能这样做:
f :: [Int] -> Bool
f l
| l==l = True
| otherwise = False
Run Code Online (Sandbox Code Playgroud)
但我不能这样做.
f :: [a] -> Bool
f l
| l==l = True
| otherwise = False
Run Code Online (Sandbox Code Playgroud)
引擎盖下发生了什么?
Tik*_*vis 23
给定两个任意类型的值,Haskell不一定知道如何比较它们的相等性.==仅针对属于Eq该类的类型定义.
例如,确定两个函数是否相等通常是不可判定的(我认为).
您可以通过检查每个元素是否等于另一个列表中的对应元素来比较两个列表.但是,这只有在比较元素的相等性时才有意义,所以你必须添加一个约束:
f :: Eq a => [a] -> Bool
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |