Az Idris modulok:
Ha egy függvényt előbb kezdünk használni, minthogy definiálnánk, akkor a fordító hibát jelez.
A modulokban a függvények, típusok és típusosztályok elé megadhatunk egy láthatóságot az alábbiak közül:
Az alapértelmezett láthatóság a private, ekkor az adott entitás nem lesz látható kívülről. Abstract esetén csak a név lesz kívülről látható. Függvényeknél ez azt jelenti, hogy az implementáció nem látszik majd. Adattípusoknál azt, hogy a típus neve látható lesz, de a konstruktorok nem. Osztályoknál az osztálynév lesz látható, a benne lévő függvények neve viszont nem. Public láthatóság értelem szerűen annyit jelent, hogy minden látható lesz kívülről.
Példa modul:
Az Idris programok belépési pontja a main függvény.
Minden Idris modul egy saját névtérrel rendelkezik, így előfordulhat, hogy több modul is tartalmaz ugyanolyan nevű függvényt. Jól mutatja ezt a listák, illetve a vektorok Nil konstruktora (ez is egy függvény). Az, hogy egy adott esetben melyik modul függvényére hivatkozunk, a típus alapján kell, hogy eldőljön. Lehetőség van egy modulon belül is létrehozni névtereket:
Az Idris programok legfontosabb elemei a függvények:
A példa az előbbieket szemlélteti:
A legelső sor a típust adja meg. A where olyan definíciókat tartalmaz, melyek csak a függvénytörzsben vannak érvényben. A the függvény "típuskényszerítésre" használható, azaz megmondja a fordítónak, hogy mi a Stringek hosszát megadó length függvényt szeretnénk használni.
Egyes függvények típusában függő típusok is vannak. Ebben az esetben a típus azért függő, mert valamilyen értéktől függ. Ez az érték implicit paraméterként jelenik meg. Függvény típusa implicit paraméterek kiírása nélkül:
Ha kiírjuk az implicit paramétereket:
Példa ugyanebben az esetben függvényhívásra:
Valójában bármelyik argumentumnak adható név:
Időnként előfordul, hogy egymást hívó függvényeket szeretnénk megadni. Ekkor használhatjuk a mutual blokkot.
Először a deklaráció, aztán a függvénytest kerül hozzáadásra.