The Codec monad provides functions for encoding and decoding
complex data structures with unique integer numbers. In the
simplest case the entire sturecture can be transformed to unique
atom (see example1 below). When it is not sufficient to encode
the input object with one codec, more complex codec structure can
be used (see example2 below). The library relies on a 'data-lens'
package which provides types and functions for codec manipulations.

Version of encode which doesn't update the return componenent
of the atom codec. It is useful when we know that particular
value (e.g. value of a condition observation) won't be decoded
afterwards so there is no need to store it and waste memory.