I don’t think it would be impossible per se, here is a proof of concept where you can achieve something similar:
message = "hello world"
suffix = "world"
case message do
<<prefix::binary-size(byte_size(message) - byte_size(suffix)), ^suffix::binary>> -> prefix
end
# "hello "
(I’m cheating because I’m using the message
variable from the parent scope, so this wouldn’t be viable as an implementation strategy).
The real problem I assume would be to be able to do it efficiently especially when dispatching over multiple clauses. Binary matching is very optimized in its current implementation, nimble_parsec is a great example leveraging it.
I found this paper when looking for resources explaining how it is being optimized, quite interesting.