我用(^) :: (Num a, Integral b) => a -> b -> a了很多来定义常数因子或大小.问题是GHC抱怨默认为Integer.
现在我知道为什么会发生这种情况......我知道我可以"只是"写出(x^(y::Int))去除警告.但这看起来只是"丑陋".生活在警告中的奥托也不是一个好选择.
同样的事情适用于我(^^) :: (Integral b, Fractional a) => a -> b -> a并且(**) :: Floating a => a -> a -> a不适用于我.
任何人都有一个很好的解决这个(第一世界)的问题?
刚刚发现这个宝石的代码:
alignment a = 2 ^ ceiling (logBase 2 (fromIntegral (sizeOf a)))
Run Code Online (Sandbox Code Playgroud)
这是一个LOC和GHC抱怨默认Integer和Double在同一条线上.
您可以使用更具体的类型定义自己的运算符.或者您可以(^)使用更具体的类型重新定义运算符,如下所示:
import Prelude hiding ((^))
import qualified Prelude ((^))
(^) :: Num a => a -> Int -> a
(^) = (Prelude.^)
x :: Int
x = 2^3
Run Code Online (Sandbox Code Playgroud)