Semantics (Eval) doesn't need the Monad. Is there a way to use Applicative, forget about sharing, and somehow reconstruct it as part of implementation? Basically, there is a canonical way to introduce sharing. Does it have to be explicit? Put otherwise: is there a way to introduce the extra structure canonically, keeping one end of the morphism Applicative, and the other Monad?