Hi.
Yes, the example with Let Name Term Term is what I was experimenting with. About "eval t2 . (update' <*> pure s <*> eval t1)": Well I was following applicative style as "Applicative Programming with Effects" by Conor McBride I did not consider this line applicative because of the (.) operator; I am trying to get away with just `pure` and `<*>` -- to be more precise, the K and S combinators. So the question becomes: can we implement the environment modification operation without resorting to function composition?
Note that for (->), (<$>) = (.).
Thus
eval t2 . bracket ≡ eval t2 <$> bracket
Note also that by definition (<$>) = (<*>) .
pure and therefore
eval t2 <$> bracket ≡ pure (eval t2) <*> bracket
So more precisely
eval t2 . (update' <*> pure s <*> eval t1) ≡ pure (eval t2) <*> (update' <*> pure s <*> eval t1)
which, as per your requirements, uses only pure and (<*>) (plus function application and brackets).
Is this what you where going for? If not I think we would need more precisely defined requirements to help further.
Cheers.