has closures & less shitty repl