Confusing errors regarding types and lifetimes

Unfortunately, i don't think so. The core of my problem is that I'm not able to specify the lifetime parameter for A, which should match the lifetime bound that is generated by the higher range trait bound that is desugared by impl Fn(&str) -> Result<(&str, A), ()> as the type for f1. I honestly think this is a compiler bug of some kind. after desugaring, foo becomes

fn foo<F1, A, F2>(
    f1: F1,
    base: &str,
    f2: F2
) 
where
    F1: for<'s> Fn(&'s str) -> Result<(&'s str, A), ()>,
    F2: Fn(A) -> bool
{...}

It seems to me that in cases where A would be parametric over 's as defined in for<'s>, no matter how hard I try I cannot find a way to bind A's lifetime parameter to 's. These cases include when A is &str or any struct/enum that would contain &str, where &str references the same str as the arument to f1.