如何修改Haskell函数toBin使其适配Integer -> [Int]类型签名?
Haskell toBin 函数适配 Integer 入参的调整方案
你只需要根据你的输出需求选择对应调整方式即可:
方案1:保持输出为 [Int] 类型(完全匹配你的需求)
需要做2处调整:
- 修改函数类型签名,将入参类型从
Int替换为Integer - 对取余得到的
Integer类型结果做类型转换,适配输出列表的Int元素类型
修改后的完整代码如下:
toBin :: Integer -> [Int] toBin n | n == 0 = [] toBin n = [fromIntegral (n `mod` 2)] ++ toBin (n `div` 2)
原理说明:
div、mod、等值判断都属于Integral类型类的通用方法,Int和Integer都实现了该类型类,因此运算逻辑不需要修改,仅需要用fromIntegral方法完成整数类型的转换即可。
方案2:允许输出为 [Integer] 类型
仅需要修改类型签名即可,原有函数实现不需要做任何改动:
toBin :: Integer -> [Integer] toBin n | n == 0 = [] toBin n = [n `mod` 2] ++ toBin (n `div` 2)
内容的提问来源于stack exchange,提问作者user17173786
相关产品推荐
相关产品推荐

