我在 Haskell 中有以下一段代码:

addm a b m = fromInteger $ mod (fromIntegral a + fromIntegral b) (fromIntegral m)

这个想法是,如果 abm 的类型没有足够的位使得加法可以包装(例如,如果使用 Word8 ),那么计算将是不正确的。因此,为了防止这种情况发生,我们暂时转换为 Integer ,进行计算然后再转换回来。

在没有三个 fromIntegral 和一个 fromInteger 的情况下,有没有更简洁的方法来编写这个?

最佳答案

扩展 augustuss's comment :

addm a b m = i $ mod (i a + i b) (i m)
  where i = fromIntegral

( fromIntegerfromIntegralInteger 的作用相同,所以我们可以用 fromInteger 替换 fromIntegral )。

关于Haskell:从/到整数转换的冗长性可以更简洁吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27624758/

10-12 23:16