Utilizziamo la notazione di Haskell per denotare il tipo "lista di elementi di tipo T": [T] Introduciamo poi le costanti "cons", "hd" e "tail". Ovviamente gli assiomi e le regole valgono per ogni possibile T. B |- L : [T] B |- M : T ----------------------------------- B |- cons M L : [T] ------------------------------- B |- emptylist : [T] B |- L : [T] L diverso da emptylist ------------------------------------------- B |- hd L : T B |- L : [T] L diverso da emptyist ----------------------------------------------- B |- tail L : [T] Ovviamente possiamo anche utilizzare, al posto delle regole di inferenza sopra descritte, gli assiomi seguenti: ----------------------------------------------- B |- cons : T -> [T] -> [T] ------------------------------- B |- emptylist : [T] -------------------------------- B |- hd : [T] -> T ---------------------------- B |- tail L : [T] -> [T] con questo approccio si capisce pero' che il sistema permette di tipare cose come hd emptylist oppure tail emptylist.