
The standard way of building an application has the following modules.

An abstract syntax:
```
  abstract Music = {
  cat
    Kind ;
    Property ;
  fun
    PropKind : Kind -> Property -> Kind ;
    Song : Kind ;
    American : Property ;
  }
```
A domain lexicon interface:
```
  interface LexMusic = open Cat in {
  oper
    song_N : N ;
    american_A : A ;
  }
```
A functor on ``Syntax`` and the domain lexicon interface:
```
  incomplete concrete MusicI of Music = open Syntax, LexMusic in {
  lincat
    Kind = CN ;
    Property = AP ;
  lin
    PropKind k p = mkCN p k ;
    Song = mkCN song_N ;
    American = mkAP american_A ;
  }
```
For each language, an instance of the domain lexicon:
```
  instance LexMusicGer of LexMusic = CatGer ** open ParadigmsGer in {
  oper
    song_N = mkN "Lied" "Lieder" neuter ;
    american_A = mkA "amerikanisch" ;
  }
```
For each language, an instantiation of the functor:
```
  --# -path=.:present:prelude

  concrete MusicGer of Music = MusicI with
    (Syntax = SyntaxGer),
    (LexMusic = LexMusicGer) ;
```
