batchInterpret[call_] :=
Block[
{
interpMe,
interpRes,
interps
},
{interpRes, interps} =
Reap[
Block[{Interpreter =
Function[{k},
Function[Sow[#, k]; interpMe[k, Hash[#]]]
]},
call
],
_,
# ->
AssociationThread[Hash /@ #2, Interpreter[#][#2]] &
];
interps = Association@interps;
interpMe[k_, r_] :=
interps[k, r];
interpRes /. e_interpMe :> RuleCondition[e, True]
];
batchInterpret~SetAttributes~HoldFirst;