В XDS'е я использую препроцессор для правильного выбора импортируемых модулей в зависимости от описания типа:

## Код:
```
MODULE MyMath;

<* IF Float="REAL" THEN *>
  IMPORT
    FMath:=RealMath;
  TYPE
    Float * = REAL;

<* ELSIF Float="LONGREAL" THEN *>
  IMPORT
    FMath:=LongMath;
  TYPE
    Float * = LONGREAL;
<* ELSE *>
  'ERROR: equation Float is not defined
<* END *>

PROCEDURE sqrt * (x:Float): Float;
  BEGIN
      RETURN FMath.sqrt(x)
  END sqrt;

END MyMath.
```

Насколько я знаю, в рамках Оберона эта проблема (возможно не единственная) не решается.

В свете этого вопрос - может сначала обсудить задачи, которые препроцессор должен решать?