From 70e6c380ed79aa6f4b82709a3fe99e9ce79b0130 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Fri, 24 Mar 2017 13:56:32 -0700 Subject: [PATCH] fix(library/vm/vm_io): fix io_monad see #1485 --- src/library/vm/vm_io.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/library/vm/vm_io.cpp b/src/library/vm/vm_io.cpp index 54f450de4a..df5dd23511 100644 --- a/src/library/vm/vm_io.cpp +++ b/src/library/vm/vm_io.cpp @@ -281,11 +281,11 @@ static vm_obj mk_fs() { return mk_vm_constructor(0, 11, fields); } -static vm_obj io_return(vm_obj const &, vm_obj const &, vm_obj const & a, vm_obj const &) { +static vm_obj io_return(vm_obj const &, vm_obj const & a, vm_obj const &) { return mk_io_result(a); } -static vm_obj io_bind(vm_obj const & /* e */, vm_obj const & /* α */, vm_obj const & /* β */, vm_obj const & a, vm_obj const & b, vm_obj const &) { +static vm_obj io_bind(vm_obj const & /* α */, vm_obj const & /* β */, vm_obj const & a, vm_obj const & b, vm_obj const &) { vm_obj r = invoke(a, mk_vm_unit()); if (cidx(r) == 0) { vm_obj v = cfield(r, 0); @@ -295,9 +295,10 @@ static vm_obj io_bind(vm_obj const & /* e */, vm_obj const & /* α */, vm_obj co } } -static vm_obj io_monad(vm_obj const &, vm_obj const &) { - return get_vm_state().invoke(get_unsafe_monad_from_pure_bind_name(), - {mk_vm_simple(0), mk_native_closure(io_return), mk_native_closure(io_bind)}); +static vm_obj io_monad(vm_obj const &) { + vm_state & S = get_vm_state(); + vm_obj const & mk_unsafe_monad = S.get_constant(get_unsafe_monad_from_pure_bind_name()); + return invoke(mk_unsafe_monad, mk_vm_simple(0), mk_native_closure(io_return), mk_native_closure(io_bind)); } static vm_obj io_catch(vm_obj const &, vm_obj const &, vm_obj const &, vm_obj const & a, vm_obj const & b, vm_obj const &) {