Distinguo tre livelli di organizzazione durante la programmazione: il livello di libreria, il livello di componente e il livello di applicazione. Una libreria definisce le funzioni per risolvere una serie di problemi correlati o operazioni relative alle preforme in modo strumenti e nessuna politica . Un'applicazione consente a più librerie di interagire e definisce le politiche per la diagnostica, la gestione degli errori, l'internazionalizzazione, ... Un componente si trova tra la libreria e l'applicazione, gestisce errori di basso livello e produce diagnostica, potrebbe avere un vecchio stato globale ed è a conoscenza di altri componenti.
Ora ho implementato una libreria come un functor parametrizzato da un modulo che ha una costante n e i valori associati a diversi valori di n hanno tipi incompatibili, che è lo scopo di implementare la libreria come un funtore. Io chiamo tale configurazione una configurazione difficile , perché in qualche modo deve essere hard-coded nel programma.
Ora sto affrontando il seguente problema: In questa impostazione, voglio consentire all'utente del programma di scegliere il valore di n per la durata del programma. Poiché la libreria è un funtore, ci si sente obbligati a scrivere come componente il componente che interfaccia la libreria al programma. Ma voglio che il valore scelto di n sia una proprietà del componente, non dell'applicazione, e voglio che i componenti siano moduli regolari (nessun functor permesso).
Come posso avvolgere una libreria parametrica (implementata come un funtore) in un componente non parametrico, in modo che i parametri possano essere scelti all'avvio dell'applicazione? Insisto sul fatto di poter esprimere la logica dell'applicazione al massimo livello in termini di moduli non parametrici, e voglio evitare moduli parametrizzati simili a quelli delle bambole russe a questo livello.