无法将类型"b"与 Int 匹配

  • 本文关键字:Int 匹配 类型 haskell
  • 更新时间 :
  • 英文 :


任务:使用map变换一组数字,使每个偶数除以2,每个奇数乘以2

prel2 :: (Fractional b) => [Int] -> [b]
prel2 x = map prel x
where prel y
|even y = y/2
|otherwise = y*2

我知道这是一些基本的东西,但我不明白为什么会出现错误

您的类型签名承诺您可以提供具有Fractional实例的任何类型的值列表。但是,由于y总是Int(从x :: [Int]开始),那么y*2总是Int,并且y/2根本不会进行类型检查。

可能想要的是使用div而不是/,将Fractional约束替换为Integral约束,然后将类型泛化为Integral b => [b] -> [b]

最新更新