public static function elements()
    {
        $coll = self::getArgs(func_get_args());
        if (empty($coll)) {
            throw new \InvalidArgumentException();
        }
        return self::choose(0, count($coll) - 1)
            ->bindGen(function (RoseTree $rose) use ($coll) {
                return self::pureGen($rose->fmap(
                    function ($index) use ($coll) {
                        return $coll[$index];
                    }
                ));
            });
    }