A closure típus segítségével tulajdonképpen egy programblokkot tudunk átadni paraméterként. Closure típusú objektumot closure konstruktorral lehet létrehozni, aminek a következő a szintaxisa:
Ez valójában nem más, mint egy metódus deklaráció, azzal a különbséggel, hogy a method kulcsszó és az üzenet nevét a & szimbólummal helyettesítjük (a tervezők a λ szimbólumra akarnak utalni). Ha a closure objektumnak nincs argumentuma, akkor a &() elhagyható, és ilyenkor leírva pont úgy néz ki az objektum, ahogy egy programblokk. Amikor kiértékelődik, a closure konstruktor két dolgot készít:
Ugyanúgy ahogy a beágyazott metódus deklarációknál, a closure eval metódusának törzse lexikálisan a konstruktor kiértékeléskor aktív szkópba van ágyazva. Ugyanakkor, ellentétben a beágyazott metódussal, az eval metódus globálisan látható (pontosan addig, amíg a megfelelő closure objektum elérhető) Így egy closure objektum meghívható a lexikálisan bennfoglaló blokk befejezése után is.
A closure típus lehetőséget ad arra, hogy felhasználói szinten valósítsunk meg különböző programkonstrukciókat. Ezért a nyelv készítői nem is szorították meg a nyelvet, és a loop primitív metódus kivételével minden programkonstrukciót a standard könyvtárban valósítottak meg, meghagyva a lehetőséget arra, hogy bárki újabbakkal egészítse ki, vagy esetleg más konstrukciókat használjon.
Példaként tekintsük át, hogy a Cecil standard könyvtárában milyen kivételkezelő konstrukciókat valósítottak meg.