haskell 无法将类型'B'与Int匹配

4nkexdtk  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(124)

任务:使用Map转换一系列数字,使每个偶数除以2,每个奇数乘以2

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

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

eyh26e7m

eyh26e7m1#

你的类型签名承诺你可以提供一个任何类型的值列表,只要它有一个Fractional示例,但是,由于y * 总是 * 一个Int(从x :: [Int]开始),那么y*2将总是一个Int,并且y/2根本不会进行类型检查。
您 * 可能 * 想要的是使用div而不是/,将Fractional约束替换为Integral约束,然后将您的类型泛化为Integral b => [b] -> [b]

相关问题