**Text.Printf**and then use the

**printf**function with

**"%b"**as a descriptor. If this doesn't work then you might need a newer version of Haskell. Anyway,

**read**this to convert to an integer and then multiply by 9 - so the list of numbers that are all made of digits 0 and 9 can be defined so:

Prelude> import Text.Printf

Prelude Text.Printf> let nines = [ 9 * read (printf "%b" n) | n <- [1..] ]

Test this:

Prelude Text.Printf> take 10 nines

[9,90,99,900,909,990,999,9000,9009,9090]

So the question asked for the first of these numbers that is a multiple of 23:

Prelude Text.Printf> head [ n | n <- nines, n `mod` 23 == 0 ]

990909

I like the other way better partly because I'm not sure how this function

**printf**works. Doesn't it have to take a variable number of parameters to match the placeholders in the string? How does that work against the type checker? Some reading to do

## No comments:

## Post a Comment