Absztrakt adattípust úgy definiálhatunk, hogy a típus specifikációt és a megvalósítást egyetlen modulban írjuk le. Minden modult önálló fájlban tárolunk, a fájl nevét úgy kapjuk, hogy a modul nevéhez a .hs kiterjesztést adjuk.
Az alábbi példa a verem definíciója:
Mivel a modul fejlécében csak a három típusműveletet exportáltuk a típuson kívül (StkType), a típuskonstruktorok (EmptyStk, Stk) rejtve maradnak a modul külső felhasználói előtt. Így a modulon kívül vermet csak az empty típusműveleten keresztül lehet létrehozni.
Példa a használatra:
A láthatósági szabályok lehetővé teszik, hogy az implementációt bármikor kicseréljük a verem alatt. Például valósítsuk meg a vermet listával: