type Bool = `True | `False;; let fun check (String -> Bool) | [ _* 'Castagna' _* ] -> `True | _ -> `False in (check "Giuseppe Castagna", check "Alain Frisch" );; let fun extr (String -> String) [ (('a' x::_) | _)* ] -> x in extr "abcaxy";; type Text = [ (Char | [ PCDATA ])* ];; let fun extr (Text -> String) [ (x::PCDATA | _)* ] -> x in extr [ 'abc' 'def' ['Blabla'] 'xyz' ];;