Right, requiring only `~Any` would mean you'd need to at least allocate on each `fail!()`, which seems kinda unnecessary if most uses of it right now work with a static string slice.

Plus the `LinkedFailure` variant might remain there for good because otherwise propagating all the different fail causes in a linked failure scenario might become quite complex (and expensive in case of `~Any` because of additional allocations). And that means we'd be using an enum anyway, and at that point we can as well just support basic string messages too.

However, there might be value in exposing those three variants as one more integrated error type that has the same interface no matter which kind of task failure happened to lessen the burden on the user (`FailCause` is already halfway there).