据我所见,这段代码应该编译起来没有问题:
import Data.Digits (digits)
-- |convert integer to arbitrary base with specified charset
-- base/radix is charset string length.
-- eg. convert the integer 255 to hex:
-- intToBaseN 255 "0123456789abcdef" = "ff"
numToBaseN :: Integral n => n -> [Char] -> String
numToBaseN num charlst = map (\i -> charlst !! (fromIntegral i)) lst where
lst = digits (length charlst) num
但是GHC抱怨说
num
在
lst
表达式不是
Int
。但是
digits
是
digits :: Integral n => n -> n -> [n]
它不需要
国际
作为一个参数,只有一个整数
numToBaseN
也一样。
!!
需要Int,这就是为什么使用
fromIntegral
.
这是怎么回事?
如果我替换
号码
具有
(fromIntegral num)
,但随后我失去了转换整数(即任意大整数)的能力。