- unpure_pure_container_tag = scm_make_smob_type ("unpure-pure-container", 0);
- scm_set_smob_mark (unpure_pure_container_tag, pure_mark);
- scm_set_smob_print (unpure_pure_container_tag, print_unpure_pure_container);
- unpure_pure_call_tag = scm_make_smob_type ("unpure-pure-call", 0);
- scm_set_smob_mark (unpure_pure_call_tag, scm_markcdr);
- scm_set_smob_apply (unpure_pure_call_tag,
- (SCM (*)()) apply_unpure_pure, 2, 0, 1);
-};
-
-ADD_SCM_INIT_FUNC (unpure_pure_container, init_unpure_pure_container);
+ if (Unpure_pure_container *upc = unsmob<Unpure_pure_container> (data))
+ data = upc->unpure_part ();
+ if (ly_is_procedure (data))
+ return scm_apply_1 (data, grob, rest);
+ return data;
+}