composer startsWith&{s:} @: 0; (<='$s;'>? -> @:1; <'.*'>) $@ end startsWith composer endsWith&{s:} @: 0; () $@ rule ends: (<'.'>* <='$s;'> -> @:1;) end endsWith composer contains&{s:} @: 0; (<~='$s;'>? <='$s;'>? -> @:1; <'.*'>) $@ end contains templates find&{s:} when startsWith&{s:$s} <=1>)> do '$; starts with $s;' ! when endsWith&{s:$s} <=1>)> do '$; ends with $s;' ! when contains&{s:$s} <=1>)> do '$; contains $s;' ! otherwise '$s; cannot be found in $;' ! end find 'abcd' -> find&{s:'ab'} -> !OUT::write ' ' -> !OUT::write 'abcd' -> find&{s:'cd'} -> !OUT::write ' ' -> !OUT::write 'abcd' -> find&{s:'bc'} -> !OUT::write ' ' -> !OUT::write 'abcd' -> find&{s:'e'} -> !OUT::write ' ' -> !OUT::write 'banana' -> find&{s:'na'} -> !OUT::write