def type_decisioner(marc_xml, mono_callback, multimono_callback,<EOL>periodical_callback):
marc_xml = _read_content_or_path(marc_xml)<EOL>record = MARCXMLRecord(marc_xml)<EOL>if record.is_monographic or record.is_single_unit:<EOL><INDENT>return mono_callback()<EOL><DEDENT>elif record.is_multi_mono:<EOL><INDENT>return multimono_callback()<EOL><DEDENT>elif record.is_continuing:<EOL><INDENT>return periodical_callback()<EOL><DEDENT>raise ValueError("<STR_LIT>")<EOL>
Detect type of the `marc_xml`. Call proper callback.

Args:
    marc_xml (str): Filename or XML string. Don't use ``\\n`` in case of
                    filename.
    mono_callback (fn reference): Callback in case of monographic
                  publications.
    multimono_callback (fn reference): Callback used in case of
                       multi-monographic publications.
    periodical_callback (fn reference): Callback used in case of periodical
                        publications.

Returns:
    obj: Content returned by the callback.

Raises:
    ValueError: In case that type couldn't be detected.