def immaterial(dace_data, materialize_func):
    """ A data type with a materialize/serialize function. Data objects with
        this type do not allocate new memory. Whenever it is accessed, the
        materialize/serialize function is invoked instead. """
    dace_data.materialize_func = materialize_func
    return dace_data
