
like to study his very short and efficient code in my attempt to get a feeling for "good" code.
Now I feel embarrassed. I should therefore mention that it is in fact not a very good idea to let the code crash, whenever its not able to cash out any money. I mean that would be a really bad idea. In such a case, you might want to wrap the whole thing with the Maybe monad. import Control.Monad saverCashout :: (Integral a) => a -> [a] -> Maybe [a] saverCashout 0 _ = Just [] saverCashout _ [] = Nothing saverCashout tocash (b:bs) = liftM (fst r :) (saverCashout (snd r) bs) where r = tocash `divMod` b I was just lazy in the other code. *Main> saverCashout 755 [50,100,50,5] Just [15,0,0,1] *Main> saverCashout 801 [50,100,50,5] Nothing Thomas