任务:使用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]
。