Tôi là người mới sử dụng Haskell. Tôi đã nhận thấy rằng Haskell không hỗ trợ tên kỷ lục quá tải:Tại sao Haskell/GHC không hỗ trợ quá tải tên bản ghi
-- Records.hs
data Employee = Employee
{ firstName :: String
, lastName :: String
, ssn :: String
} deriving (Show, Eq)
data Manager = Manager
{ firstName :: String
, lastName :: String
, ssn :: String
, subordinates :: [Employee]
} deriving (Show, Eq)
Khi tôi biên dịch này, tôi nhận được:
[1 of 1] Compiling Main (Records.hs, Records.o)
Records.hs:10:5:
Multiple declarations of `firstName'
Declared at: Records.hs:4:5
Records.hs:10:5
Records.hs:11:5:
Multiple declarations of `lastName'
Declared at: Records.hs:5:5
Records.hs:11:5
Records.hs:12:5:
Multiple declarations of `ssn'
Declared at: Records.hs:6:5
Records.hs:12:5
Với "sức mạnh" của hệ thống kiểu Haskell, nó có vẻ như nó phải được dễ dàng cho trình biên dịch để xác định trường nào cần truy cập trong
emp = Employee "Joe" "Smith" "111-22-3333"
man = Manager "Mary" "Jones" "333-22-1111" [emp]
firstName man
firstName emp
Có một số vấn đề mà tôi không thấy. Tôi biết rằng Báo cáo Haskell không cho phép điều này, nhưng tại sao không?
Đây không phải là câu trả lời cho câu hỏi của bạn, nhưng tôi usuaully chia các loại dữ liệu thành các mô-đun riêng biệt bất cứ khi nào một tình huống như của bạn phát sinh. Ví dụ: tôi có thể tạo mô-đun 'Employee' và mô đun' Manager' và nhập chúng đủ điều kiện như nói 'E' và' M' tương ứng, sau đó sử dụng 'E.firstName',' M.firstName', v.v. Điều này mang lại cho tôi cú pháp hợp lý. (Tôi không nói điều này nhất thiết phải là một ý tưởng hay, nhưng đó là những gì tôi đã làm và nó trở nên độc đáo trong trường hợp của tôi). – gspr
Vâng, nhưng điều này có vẻ như một "kludge" trong một ngôn ngữ khác thanh lịch. – Ralph