\vspace*{15pt}For instance, with \verb:english.lst: storing a list of 173528 Englishwords, as a text file of size 2Mb, the command\verb:make_lex < english.lst > english.rem:produces a trie representation as a file of 4.5Mb. Obviouslywe are wasting storage because we create a huge structure which sharesthe words along with their common initial prefixes, but which ignores thepotential space saving of sharing common suffixes. We shall developsuch sharing in a completely generic manner, as follows. \section{Sharing}\label{sharing}Sharing data representation is a very general problem. Sharing identical representations is ultimately the responsibility ofthe runtime system, which allocates and desallocates data with dynamic memorymanagement processes such as garbage collectors. But sharing of representations of the same type may also be programmed by bottom-up computation. All that is needed is a memo function building the corresponding map without duplications.Let us show the generic algorithm, as an ML {\sl functor}.% Note: no use of pointer equality (\verb:==: in ML). \subsection{The Share functor}This functor (that is, parametric module) takes as parameter an algebrawith its domain seen here as an abstract type. Here is its public interfacedeclaration: