Converting number base

user181351 picture user181351 · Apr 5, 2012 · Viewed 9.1k times · Source

Is there a platform function that will do the following?

convertBase :: (Num a, Num b) => Int -> Int -> [a] -> [b]

Convert a number from base 'a' to base 'b' where each list item is a digit in the number. for example:

convertBase 2 10 [1,1,0,1] = [1, 3]

I hope that makes sense, let me know if i can clear anything up

Answer

hammar picture hammar · Apr 5, 2012

Using the digits package from Hackage:

import Data.Digits (digits, unDigits)

convertBase :: Integral a => a -> a -> [a] -> [a]
convertBase from to = digits to . unDigits from

You can add a fromIntegral in there if you need the input and output types to be different. Also, the Integral constraint makes more sense than Num, since you probably don't want to deal with complex or floating-point digits.