Haskell 有没有一种方法可以实现积分。fromEnum`适用于所有整数?
好 好 不太好Haskell 有没有一种方法可以实现积分。fromEnum`适用于所有整数?,haskell,Haskell,好 好 不太好 我正在对数据进行一些位处理。位并寻找一种通用方法来组合由Bool、Int和Integer表示的字段整数字段可能非常大 使现代化 我尝试做的总体事情如下所示: λ (fromIntegral . fromEnum) 100000000000000000000 7766279631452241920 如果可能的话,我想计算出toBits/from integral。那么from enum将转到Int,因此您总是会在某个地方达到它的边界。-但是你到底想在这里做什么呢?从最后两个例子来
我正在对
数据进行一些位处理。位
并寻找一种通用方法来组合由Bool
、Int
和Integer
表示的字段<代码>整数字段可能非常大
使现代化
我尝试做的总体事情如下所示:
λ (fromIntegral . fromEnum) 100000000000000000000
7766279631452241920
如果可能的话,我想计算出
toBits/from integral
。那么from enum
将转到Int
,因此您总是会在某个地方达到它的边界。-但是你到底想在这里做什么呢?从最后两个例子来看,看起来你只想在数字上显示id
?@CarstenKönig请查看我的更新。Bool
,Int
,和Integer
是一组小类型,你自己创建一个类怎么样?@luqui好主意。我试试看。
> (fromIntegral . fromEnum) (10000 :: Int)
10000
λ (fromIntegral . fromEnum) 100000000000000000000
7766279631452241920
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