MCORBA is a binding to the CORBA distributed object framework for the purely declarative logic/functional language Mercury. The binding preserves the referential transparency of the language, and has several advantages over similar bindings for other strongly typed declarative languages. As far as we know, it is the rst such binding to be bidirectional; it allows a Mercury program both to operate upon CORBA components and to provide services to other CORBA components. Whereas the Haskell binding for COM maps COM interfaces onto Haskell types, MCORBA maps CORBA interfaces onto Mercury type classes. Our approach simpli es the mapping, makes the implementation of CORBA's interface inheritance straightforward, and makes it trivial for programmers to provide several di erent implementations of the same interface. It uses existential types to model the operation of asking CORBA for an object that satis es a given interface but whose representation is unknown.