codice:
(@): 'a list -> 'a list -> 'a list 
(:: ) :'a -> 'a list -> 'a list
@ prende due liste e le concatena
:: apprende un elemento all'inizio della lista
Ciò si riflettere nei tipi e, di conseguenza, negli errori che ottieni...

Ripeto comunque che è il caso di evitare di concatenare le liste in quel modo a ogni ciclo...