Không, điều này là không thể. Sẽ không thể viết một hàm như vậy, bởi vì bạn có thể có các danh sách có độ mịn có thể chưa được biết: hãy xem xét một vòng lặp đệ quy tạo ra một danh sách tất cả các twin primes nó có thể tìm thấy. Hoặc, để theo dõi những gì Daniel Pratt đã đề cập trong phần bình luận, bạn có thể có một danh sách tất cả các bước mà universal Turing machine thực hiện trong khi thực thi, kết thúc danh sách khi máy dừng lại. Sau đó, bạn có thể chỉ cần kiểm tra xem danh sách đó có vô hạn hay không và giải quyết Halting problem!
Câu hỏi duy nhất khi triển khai Câu hỏi là danh sách có tuần hoàn hay không: nếu một trong các con trỏ đuôi trỏ trở lại ô trước của danh sách. Tuy nhiên, điều này là cụ thể cho việc triển khai thực hiện (Haskell không chỉ định bất kỳ thứ gì về cách triển khai phải đại diện cho các giá trị), không tinh khiết (các cách viết khác nhau cùng một danh sách sẽ đưa ra các câu trả lời khác nhau) và thậm chí phụ thuộc vào những thứ như danh sách bạn chuyển vào một hàm như vậy đã được đánh giá. Thậm chí sau đó, nó vẫn sẽ không thể phân biệt danh sách hữu hạn từ danh sách vô hạn trong trường hợp chung!
(Tôi đề cập đến điều này bởi vì, bằng nhiều ngôn ngữ (như thành viên của họ Lisp), danh sách vòng là chỉ loại danh sách vô hạn, không có cách nào để diễn đạt một cái gì đó như "danh sách tất cả số nguyên". vì vậy, trong những ngôn ngữ, bạn có thể kiểm tra xem một danh sách là hữu hạn hay không.)
Tôi không nghĩ vậy. Bởi vì việc đánh giá lười biếng thời gian chạy Haskell thực sự không biết liệu danh sách sẽ là vô hạn hay không; nó không phải là nó chỉ không tiếp xúc với chương trình. –
Tôi nghi ngờ điều này tương đương với cái gọi là 'vấn đề tạm dừng', trong trường hợp đó câu trả lời sẽ là "Không". –
Nếu bạn muốn có thể nhận ra các cấu trúc vô hạn, bạn có thể đọc một cái gì đó về coinduction: http://en.wikipedia.org/wiki/Coinduction, http://www.disi.unige.it/dottorato/corsi/DPCI2011/ –