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.