add convenient 'of' to create recrusive list module