Tôi có một chuỗi FileInfo, nhưng tôi chỉ quan tâm đến tên chuỗi của chúng, vì vậy tôi muốn một chuỗi chuỗi. Lúc đầu, tôi đã cố gắng một cái gì đó như thế này:Tại sao suy luận kiểu F không thể xử lý điều này?
Seq.map (fun fi -> fi.Name) fis
Nhưng đối với một số lý do, 's F # suy luận kiểu không phải là tốt, đủ để cho phép điều này, và làm cho tôi một cách rõ ràng cho một loại để 'fi':
Seq.map (fun (fi : FileInfo) -> fi.Name) fis
Tại sao chú thích này lại được yêu cầu? Nếu được biết rằng fis : seq<FileInfo>
và rằng Seq.map : ('a -> 'b) -> seq<'a> -> seq<'b>
, thì không nên suy ra rằng loại biểu thức lambda là FileInfo -> 'b
và sau đó, từ fi.Name : string
, tiếp tục suy ra rằng loại của nó là FileInfo -> string
?
Tôi hy vọng họ làm cho suy luận kiểu mạnh mẽ hơn. Tôi đã nhấn một vài trường hợp mà tôi đã phải sắp xếp lại các phương thức trong một lớp hoặc tôi sẽ nhận được các lỗi loại quá chung chung. – gradbot
Đối với giá trị của nó, bài đăng trên blog này và một số nhận xét của nó có một giải thích hữu ích về một số điểm mạnh và điểm yếu của F # trong trình kiểm tra loại của nó: http://neilmitchell.blogspot.com/2008/12/f-from-haskell- perspective.html – Juliet