public function flatten()
    {
        $ret = [];
        foreach ($this as $key => $value) {
            $ret[$key] = Match::on($value)
                ->Closure(function ($v) {
                    return $v();
                })
                ->Monad_Monadic(function ($v) {
                    return $v->flatten();
                })
                ->any()
                ->flatten();
        }

        return new static($ret);
    }