如何使此代码与 Integer-> Int 类型签名一起使用?

How can I make this code to work with the Integer- > Int type signature?

此代码使用 Int-> [Int] 类型签名,但我必须使用 Integer -> [Int] 类型签名来解决它。我必须更改什么才能使其正常工作?

toBin :: Int -> [Int]
toBin n 
    | n == 0 = []
toBin n  =   [n `mod` 2] ++ toBin (n `div` 2) 

您可以使用 fromIntegral :: (Integral a, Num b) => a -> bInteger(或任何 Integral 类型)转换为 Int(或任何 Num 类型):

toBin :: Integer -> [Int]
toBin 0 = []
toBin n = [<strong>fromIntegral (</strong>n `mod` 2<strong>)</strong>] ++ toBin (n `div` 2)

如果 n 是一个 Integer,那么 n `mod` `2 也是一个 Integer。我们不能使用 n `mod` 2 作为列表的元素,因为 return 类型是 [Int],所以是 Int 的列表。因此,我们需要将 Integer 转换为 Int 以使元素的类型正确,并且我们可以将 Integer 转换为相应的 Int (给定 Integer 可以用 Int) 和 fromIntegral.

表示