:- module bug. :- interface. :- type pickles ---> pickles(int). :- func pickles = pickles. :- implementation. :- import_module int. :- import_module list. :- import_module univ. :- import_module type_desc. :- import_module construct. :- import_module deconstruct. :- import_module require. :- pragma memo(pickles/0). pickles = !:P :- !:P = pickles(0), L = [1,2,3], register_pickle(type_ctor(type_of(L)), pickle_list_as_array, !P), % register_pickle(type_ctor(type_of(_:byte_buffer)), pickle_byte_buffer, !P), true. :- type byte_buffer == int. :- type maybe_pickle == pred(pickles, univ, byte_buffer, byte_buffer). :- inst maybe_pickle == (pred(in, in, di, uo) is det). :- pred register_pickle(type_ctor_desc::in, maybe_pickle::in(maybe_pickle), pickles::in, pickles::out) is det. register_pickle(T, N, pickles(I), pickles(I+1)) :- true. :- pred pickle_list_as_array `with_type` maybe_pickle `with_inst` maybe_pickle. pickle_list_as_array(Pickles, UnivList, !BB) :- error("foo").