local fun repeat x = intf [] (fn (_,ls) => x::ls) in fun change1 nil 0 = Solution [] | change1 nil _ = Nothing | change1 (c::cs) x = sflat (map (fn n => smap (fn x => (repeat c n) @ x) (change1 cs (x - n*c))) (iota (x div c))) end;