Trong Haskell, có thể xác định loại dữ liệu trong phạm vi chức năng không? Ví dụ: Tôi đang viết hàm f :: [(Char, Int)] -> [(Char, String)]
. Trong việc thực hiện chức năng, tôi sẽ xây dựng một cây từ danh sách đầu vào, và sau đó đi qua cây để xây dựng danh sách đầu ra. Một giải pháp là xác định một kiểu dữ liệu cây mới cụ thể cho vấn đề của tôi, cùng với hai hàm trợ giúp, một để dịch danh sách đầu vào vào Tree và cái kia để đi bộ Tree và xây dựng danh sách đầu ra.Haskell: Xác định loại dữ liệu mới với phạm vi chức năng
Bây giờ hai hàm trợ giúp có thể dễ dàng được kéo vào phạm vi f
bằng cách đặt chúng vào một mệnh đề where, nhưng còn về Tree loại nonim tạm thời thì sao? Có vẻ như xấu để gây ô nhiễm không gian tên bằng cách xác định nó bên ngoài phạm vi chức năng, nhưng tôi không biết làm cách nào khác để làm điều đó.
Đối với ngữ cảnh, hóa ra tôi đang tính toán mã hóa Huffman. Tôi không đặc biệt quan tâm đến việc tìm kiếm một thuật toán thay thế tại thời điểm này, vì tôi nghi ngờ rằng nó sẽ thường hữu ích trong Haskell để định nghĩa các kiểu dữ liệu trợ giúp giữa các hàm trợ giúp, vì vậy tôi quan tâm đến các phương pháp chung.
Tất cả khai báo kiểu dữ liệu phải ở cấp cao nhất. Nếu bạn không muốn gây ô nhiễm không gian tên, chỉ cần không xuất datatype. – user2407038
[This] (http://stackoverflow.com/questions/15320391/proposal-for-local-data-declarations-instances) có thể có liên quan. – is7s