Partitions of a list The answer to this question is much too long

Your challenge is to write a partitioning function in the smallest number of characters.

Input example

['a', 'b', 'c']


Output example

[(('a'),('b'),('c')),
 (('a', 'b'), ('c')),
 (('a', 'c'), ('b')),
 (('b', 'c'), ('a')),
 (('a', 'b', 'c'))]


The input can be a list/array/set/string etc. whatever is easiest for your function to process

You can also choose the output format to suit yourself as long as the structure is clear.

Your function should work for at least 6 items in the input
GolfScript, 51 characters
{[[]]\{[.;]`{1$[1$]+@@`1$`{[2$]-@@[+]+}++/}+%}/}:P;

The script defines a variable P which takes an array from top of the stack and pushes back a list of all partitions, e.g.
[1 2] P            # =&gt; [[[1] [2]] [[1 2]]]
[&quot;a&quot; &quot;b&quot; &quot;c&quot;] P    # =&gt; [[[&quot;a&quot;] [&quot;b&quot;] [&quot;c&quot;]] [[&quot;b&quot;] [&quot;a&quot; &quot;c&quot;]] [[&quot;a&quot;] [&quot;b&quot; &quot;c&quot;]] [[&quot;a&quot; &quot;b&quot;] [&quot;c&quot;]] [[&quot;a&quot; &quot;b&quot; &quot;c&quot;]]]

It does also work on larger lists:
6, P ,p            # prints 203, i.e. Bell number B6
8, P ,p            # 4140

You may perform own tests online.