I was not able to dig the exact source of this error in Heist code, but if I put a $ value within a bound splice and use it as an attribute substitute, the attribute substitution process seems to continue recursion into the initial substitute and further try to replace the inner text. I was unable to stop this using stopRecursion.
sampleSplice = do
textSplice ("Here is a text splice with $ in it. But this part will not be seen, as Heist will keep recursing and look to replace anything after $.")
Fixed in 0.10