recursive impls produce less garbage by virtue of not creating new instances of policies