指数默认为整数

fho*_*fho 1 haskell ghc

我用(^) :: (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抱怨默认IntegerDouble在同一条线上.

Dav*_*her 7

您可以使用更具体的类型定义自己的运算符.或者您可以(^)使用更具体的类型重新定义运算符,如下所示:

import Prelude hiding ((^))
import qualified Prelude ((^))

(^) :: Num a => a -> Int -> a
(^) = (Prelude.^)

x :: Int
x = 2^3
Run Code Online (Sandbox Code Playgroud)