No, questo non è possibile. Sarebbe impossibile scrivere una funzione del genere, perché si possono avere liste la cui finitezza potrebbe essere sconosciuta: si consideri un ciclo ricorsivo che genera un elenco di tutti gli twin primes che può trovare. Oppure, per dare un seguito a ciò che Daniel Pratt ha menzionato nei commenti, si può avere un elenco di tutti i passaggi che uno universal Turing machine prende durante l'esecuzione, terminando l'elenco quando la macchina si ferma. Quindi, puoi semplicemente controllare se un elenco di questo tipo è infinito e risolvere lo Halting problem!
L'unica domanda un'implementazione potrebbe essere risposta è se un elenco è ciclico: se uno dei suoi puntatori di coda punta indietro a una cella precedente della lista. Tuttavia, questo è specifico dell'implementazione (Haskell non specifica nulla su come le implementazioni devono rappresentare i valori), impuro (diversi modi di scrivere la stessa lista darebbe risposte diverse), e anche dipendente da cose come se la lista che si passa a tale funzione è stata ancora valutata. Anche allora, non sarebbe ancora in grado di distinguere le liste finite da liste infinite nel caso generale!
(Dico questo perché, in molte lingue (come membri della famiglia Lisp), liste ciclici sono il unico tipo di liste infinite, non c'è modo per esprimere qualcosa di simile a "un elenco di tutti i numeri interi". così, in tali lingue, si può verificare se una lista è finita o meno.)
Non credo. A causa della valutazione lenta, il runtime di Haskell non sa davvero se la lista sarà infinita; non è che non lo esponga al programma. –
Sospetto fortemente che questo sia equivalente al cosiddetto "problema di interruzione", nel qual caso la risposta sarebbe "No". –
Se desideri essere in grado di riconoscere strutture infinite, puoi leggere qualcosa sulla coinduzione: http://en.wikipedia.org/wiki/Coinduction, http://www.disi.unige.it/dottorato/corsi/DPCI2011/ –