Hi,
The current implementation of showIntAtBase in Numeric is limited to Chars
currently.
*showIntAtBase*
* :: (Integral a, Show a) => a -> (Int -> Char) -> a -> ShowS*
The 2 reasons for this constraint is:
a) We only accept functions of the form (Int -> Char)
b) An implicit concatenation using (:)
I'd like to propose a new function showIntAtBaseGeneric that removes the
(Int -> Char) function constraint and takes an additional function to
replace the implicit (:) operator.
*showIntAtBaseGeneric*
* :: (Integral a1, Num b, Show a1) =>*
* a1 -> (b -> a) -> (a -> s -> s) -> a1 -> s -> s*
Now showIntAtBase may be implemented as:
*showIntAtBase :: (Integral a, Show a) => a -> (Int -> Char) -> a -> ShowS*
*showIntAtBase base toChr n0 r0 = showIntAtBaseGeneric base toChr (:) n0 r0*
The API and behavior of showIntAtBase remains unchanged while allowing for
generic conversions not limited to Chars alone.
*Example: *
*λ> showIntAtBaseGeneric 26 id (:) 500 [] -- convert 500 to base26 and
provide output as a list.*
*[19,6]*
Please let me know thoughts/concerns if any to this proposal.
Cheers,
Vikas