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