:- module (thread.mvar).
:- interface.
:- import_module bool.
:- import_module io.
:- import_module maybe.
:- type mvar(T).
:- impure func init = thread.mvar.mvar(T).
:- mode init = (builtin.uo) is det.
:- pred init(thread.mvar.mvar(T), io.io, io.io).
:- mode init((builtin.out), (builtin.di), (builtin.uo)) is det.
:- pred put(thread.mvar.mvar(T), T, io.io, io.io).
:- mode put((builtin.in), (builtin.in), (builtin.di), (builtin.uo)) is det.
:- pred read(thread.mvar.mvar(T), T, io.io, io.io).
:- mode read((builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- pred take(thread.mvar.mvar(T), T, io.io, io.io).
:- mode take((builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- pred try_put(thread.mvar.mvar(T), T, bool.bool, io.io, io.io).
:- mode try_put((builtin.in), (builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
:- pred try_take(thread.mvar.mvar(T), maybe.maybe(T), io.io, io.io).
:- mode try_take((builtin.in), (builtin.out), (builtin.di), (builtin.uo)) is det.
