%-----------------------------------------------------------------------------%

:- module rdfDiffStore.
:- interface.

:- import_module rdfStore.
:- import_module io.

:- inst d_read    == inst_rdfDiffStore(readable).

:- inst od_read    == rdfStore.inst_open(d_read).

:- pred iterate_search(
            open_rdfDiffStore(Store)::in(od_read),
            open_rdfDiffStore(Store)::out,
            io::di,io::uo) 
    is cc_multi.

:- pred main(io::di, io::uo) is det.

%-----------------------------------------------------------------------------%

:- type rdfDiffStore(Store) --->
                rdfDiffStore(
                        diff_store      :: state_of_store(Store)
                ).

:- inst inst_rdfDiffStore(S) ---> rdfDiffStore(S).

%-----------------------------------------------------------------------------%
%-----------------------------------------------------------------------------%

:- implementation.

:- pred get_od_read(open_rdfDiffStore(S)::in(od_read),
    state_of_store(S)::out(readable)) is det.

get_od_read(OpenStore, WrappedStore):-
    inst_open_store(OpenStore) = Store,
    Store = rdfDiffStore(WrappedStore).

:- type open_rdfDiffStore(S) ==  rdfStore.open(rdfDiffStore(S)).

iterate_search(!ReadStore, !IO):-
    get_od_read(!.ReadStore, WrappedStore),
    (WrappedStore = open(RealRdfStore),
        UpdatedWrappedStore = open(RealRdfStore)
    ;WrappedStore = trans(RealRdfStore),
        UpdatedWrappedStore = trans(RealRdfStore)
    ),
    !:ReadStore = inst_store_open(rdfDiffStore(UpdatedWrappedStore)).

main(!IO).

%-----------------------------------------------------------------------------%
% vim: ft=mercury ts=8 sw=4 et wm=0 tw=0
