简单; 看一看的类型(**)
和mod
:
Prelude> :t (**) (**) :: Floating a => a -> a -> a Prelude> :t mod mod :: Integral a => a -> a -> a
它是具有罕见数值类型二者的整数的特性和一个浮点数的特性.你有几个选择来解决这个问题:
使用取幂操作可以很好地处理类似整数的数字.例如,(^) :: (Integral b, Num a) => a -> b -> a
.
使用模数运算可以很好地处理浮点数.例如,mod' :: Real a => a -> a -> a
.
realToFrac :: (Real a, Fractional b) => a -> b
在调用之前显式转换为浮点类型(**)
.
floor :: (RealFrac a, Integral b) => a -> b
在调用之前用(或另一个舍入函数)显式转换为类似整数的类型mod
.