Haskell

最近、ハスケってます。
両替するのに何通りあるか?
例えば、10円を両替する場合は、10円*1枚, 5円*2枚, 5円*1枚+1円*5枚, 1円*10枚 の4通りあります。

 -- 両替するのに何通りあるか?
countChange coins amount = cc amount 0
    where
        cc amount kindsOfCoins
            | amount == 0                   = 1
            | (amount < 0)                  = 0
            | kindsOfCoins >= length coins  = 0
            | otherwise                     = 
                (cc amount (kindsOfCoins + 1)) +
                (cc (amount - (coins !! kindsOfCoins)) kindsOfCoins)
testUS = countChange [50,25,10,5,1] 100         -- 292通り
testJP = countChange [500,100,50,10,5,1] 100    -- 159通り