有没有办法`fromIntegral。 fromEnum`适用于所有整数?

时间:2014-11-04 20:04:52

标签: haskell

> (fromIntegral . fromEnum) True
1

好。

> (fromIntegral . fromEnum) (10000 :: Int)
10000

好。

λ (fromIntegral . fromEnum) 100000000000000000000
7766279631452241920

不好。

我正在与Data.Bits进行一些比较,并寻找一种合并BoolIntInteger所代表字段的通用方法。 Integer字段可能非常大。

更新

我要做的整体事情看起来像这样:

fromExchange :: Exchange -> Integer
fromExchange e = foldr combineBits 0 collectBits
  where
    combineBits = ((.|.) . ($ e))
    collectBits =
      [ (`shiftL` 127) . toBits . doCommand
      , (`shiftL` 126) . toBits . readComplete
      , (`shiftL` 116) . fromIntegral . destId
      , (`shiftL` 64) . address
      , payload
      , (`shiftL` 108) . fromIntegral . mask
      , (`shiftL` 104) . fromIntegral . fromCommand . command
      ]

toBits :: Enum a =>
          a -> Integer
toBits = fromIntegral . fromEnum

如果可能,我想要考虑toBits/fromIntegral

0 个答案:

没有答案