Tôi đang bắt đầu học Haskell . Tôi rất mới với nó, và tôi chỉ đọc qua một vài cuốn sách trực tuyến để tìm hiểu về các cấu trúc cơ bản của nó.
Một trong những 'meme' mà mọi người quen thuộc với nó thường nói đến, đó là toàn bộ "nếu nó biên dịch, nó sẽ hoạt động *" - điều mà tôi nghĩ có liên quan đến sức mạnh của hệ thống loại.
Tôi đang cố gắng để hiểu tại sao chính xác Haskell tốt hơn các ngôn ngữ gõ tĩnh khác trong vấn đề này.
Nói cách khác, tôi giả sử trong Java, bạn có thể làm điều gì đó ghê tởm như chôn vùi
ArrayList<String>()
để chứa thứ gì đó thực sự nên có ArrayList<Animal>()
. Điều khủng khiếp ở đây là string
chứa của bạn elephant, giraffe
, v.v. và nếu có ai đó đưa vào Mercedes
- trình biên dịch của bạn sẽ không giúp bạn.
Nếu tôi đã làm ArrayList<Animal>()
sau đó, vào một thời điểm sau đó, nếu tôi quyết định chương trình của tôi không thực sự là về động vật, thì đó là về phương tiện, sau đó tôi có thể thay đổi, một chức năng sản xuất ArrayList<Animal>
để sản xuất ArrayList<Vehicle>
và IDE của tôi sẽ cho tôi biết mọi nơi ở đó là một sự phá vỡ biên dịch.
Giả định của tôi là đây là ý nghĩa của mọi người đối với một hệ thống loại mạnh , nhưng đối với tôi thì không rõ tại sao Haskell lại tốt hơn. Nói cách khác, bạn có thể viết Java tốt hay xấu, tôi giả sử bạn có thể làm tương tự trong Haskell (tức là nhét mọi thứ vào chuỗi / int thực sự phải là kiểu dữ liệu hạng nhất).
Tôi nghi ngờ tôi đang thiếu một cái gì đó quan trọng / cơ bản.
Tôi sẽ rất vui khi được hiển thị lỗi theo cách của tôi!
Maybe
chỉ đề cập đến cuối cùng. Nếu tôi phải chọn chỉ một điều mà các ngôn ngữ phổ biến hơn nên mượn từ Haskell, thì đây sẽ là nó. Đó là một ý tưởng rất đơn giản (vì vậy không thú vị theo quan điểm lý thuyết), nhưng điều này một mình sẽ làm cho công việc của chúng tôi dễ dàng hơn nhiều.