Tôi đã trò chuyện với Sadek Drobi trên twitter khi được đưa ra rằng F # dường như không hỗ trợ các loại vô hạn. Nó chỉ ra rằng trong C# bạn có thể làm một cái gì đó dọc theo những dòng:Các loại vô hạn (hay còn gọi là loại đệ quy) không thể có trong F #?
delegate RecDelegate<T> RecDelegate<T>(T x);
Tuy nhiên, sau một số thử nghiệm trên cả hai phần của chúng tôi, chúng tôi xác định rằng cùng trong F # dường như không thể cả hai ngầm và rõ ràng.
Explicit:
type 'a specialF = 'a->specialF<'a>
lỗi FS0191: định nghĩa kiểu này liên quan đến một tài liệu tham khảo cyclic ngay qua viết tắt, struct lĩnh vực hoặc mối quan hệ thừa kế.
Ngầm định:
let rec specialF (x: 'a) = specialF
Loại không phù hợp. Yêu cầu một 'b nhưng cho' a -> 'b. Kiểu kết quả sẽ là vô hạn khi hợp nhất '' b ' và' 'a ->' b '.
Tất nhiên, đây là những mẫu cố ý đơn giản.
Tôi đã tự hỏi liệu mình có nhầm lẫn hay không. Có lẽ tôi đã bỏ lỡ một số loại chú thích cần thiết?
Có một ứng dụng thực tế ở đây hay là câu hỏi chỉ là kết quả của việc điều tra để giải trí? – Brian
Theo như tôi hiểu, không có các ứng dụng minh bạch tham chiếu thực tế. Tuy nhiên, một ví dụ sẽ là với một số loại trạng thái có thể thay đổi được đóng lại, điều này có thể hữu ích cho các ứng dụng lặp lại. ví dụ: thêm (1) (2) (3) (4) - nơi có thể thực hiện bất kỳ số lượng ứng dụng nào. –
Đây là chương trình OCaml mà tôi đã viết sử dụng tính năng này để tránh mức độ gián đoạn bằng cách sử dụng rectypes. http://www.ffconsultancy.com/languages/ray_tracer/code/1/ray.ml –