Ordered sequence of ascending integer combinations
Haskell, 89 bytes

g takes an integer and returns a string.



g n=unlines$max"-".foldr(\(s,i)r-&gt;id=&lt;&lt;[show i++s:r|s:r&gt;"+"])""&lt;$&gt;mapM(mapM(,)"+-")[1..n]


Try it online!

How it works


Loosely speaking, the algorithm constructs a list of all 2^n combinations 1+2+...n+, 1+2+...n- up to 1-2-...n-, strips away the final +-terminated numbers, and if the result is empty, replaces it with -.
mapM(,)"+-" is a shorter way (using the function monad) to write \i-&gt;[('+',i),('-',i)].
mapM(mapM(,)"+-")[1..n] generates (using the list monad for the outer mapM) a list with all combinations as lists of tuples e.g. [(1,'+'),(2,'-'),...,(n,'+')].
foldr ... &lt;$&gt; ... combines each of these lists of tuples into a string, using the lambda expression to build it from the right.


(s,i) is a tuple of a sign and a number, and r is the string constructed from the tuples to its right.
id=&lt;&lt;[show i++s:r|s:r&gt;"+"] prepends i and s to the string r constructed so far, but not if the sign s is positive and r is empty.


This is tested by comparing s:r to "+". By luck this is the lexicographically smallest string that can result from concatenating them, so the comparison can use &gt; rather than /=.


Also by luck, "-" is smaller than any nonempty string that can be constructed by the fold, so the empty string can be replaced with it by using max.
Finally unlines turns the strings into a single string of lines.