Modulok

Cayenne modulokat egyszerűen kifejezéseknek nevezzük, amik a globális névtérben vannak. Modul nevek úgy hozhatók létre, hogy $ -t rakunk a nevébe. A modul névtér hierarhikusságot mutat a $ -ral mint név elválasztóval (mint a UNIX elérési utakban a / használata).

Egy modul definíció úgy néz ki mint egy egyszerű definíció, kívéve, hogy megelőzi a module kulcsszó.

module ::= module [concrete] modid :: type = expr ;

A típus nem szükséges és el is hagyható.

module ::= module [concrete] modid = expr ;

A concrete módosító szó ugyan azt a szerepet játsza itt mint a rekordoknál, azaz megcsinálhatod a modul értékét ismertté, a típusa helyett.

Példa
Néhány minta modul:
module foo$bar = 42; module foo$baz = open System$Int use Int, (+) in struct { inc :: Int -> Int; inc x = x+1; dec :: Int -> Int; dec x = x-1; };
#include
A legtöbb programnak értékekre van szüksége a System modulból. Hogy egyszerűen hozzáférjünk a definiált dolgokhoz a modulban, egyszerűen megnyitjuk (open). Ez azt jelenti, hogy a legtöbb modul open konstruktorokkal indul. Hogy enyhítsük ezt a problémát van néhány előre definiált szöveghalmaz amit belevehetünk egy modulba. Ezek a szövegek egy egyszerű szöveg beillesztéssel - #include - kerülnek be.
#include Prelude
beleveszi a következő szöveget
open System$String use * in
open System$List use * in
open System$Bool use  * in
open System$Char use * in
open System$Int use  * in
open System$Error use * in
open System$IO use * in
open System$Tuples use * in
open System$HO use * in