change _ 0 = [[]] change [] _ = fail "can't make change" change (c:cs) n | c > n = change cs n | otherwise = map (c:) (change (c:cs) (n-c)) ++ change cs n