I wanted to have a generic protocol that could have some logic of its own without enforcing you to subclass it. I would regret the decision so much, if I wasn't busy regretting other decisions even more.
Just enforce a type that you accept that's large enough to be used by many and convertable from other common types you want to use.
I swear, soon they'll classify programmers urge to write as generic and extendable as a mental illness.