explain copattern matching