A nyelv erősen modul orientált. A típusokat külön modulban kell létrehozni. A specifikációt
és az implementációt nem lehet külön fordítási egységbe tenni.
A modulban definiált
függvényeket, eljárásokat, operátorokat meg kell jelölni, hogy public vagy
private legyen.
Le lehet fordítani a modult magában is. A használt modulokat forrását, vagy azok lefordított
kódját össze kell fordítani a használó modullal.
A nyelv azonosan kezeli a beépített és a felhasználó által definiált típusokat. A saját
típusok operátorait át lehet definiálni, beleértve az értékadó operátort is. Ezt úgy lehet
megtenni, hogy megadjuk, hogy az adott operátorként melyik függvények legyenek még
értelmezve. Például, ha csinálunk egy komplex típust, és írunk olyan függvényeket, ami
összead két komplex számot, valamint egy olyan, ami egy komplex és egy valós számot, majd
azt modjuk, hogy a + műveletnél ezentúl ezt a két függvényt is vegye számításba,
onnantól a + "paraméterezéséből" eldönti, hogy melyik függvényt
is kell használnia.
Az operátorok precedenciáját nem lehet megváltoztatni.