Tôi đã viết mô-đun Vector
toán học trong Haskell.Đặt tên bí danh kiểu dữ liệu Haskell
Vì vậy, tôi bắt đầu với:
data Vector a = Vector !a !a !a deriving (Eq, Show)
Fine-này cho phép tôi sử dụng bất kỳ loại dữ liệu số tôi muốn. Vấn đề là tôi không muốn viết Double
và Vector Double
ở khắp mọi nơi vì một lý do đơn giản mà tôi không cần phải làm. Vì vậy, tôi thêm:
type Scalar = Double
type Vector = Vector Scalar
Nhưng tất nhiên dòng thứ hai là sai, vì bây giờ có hai khai báo là Vector
. Vậy tôi nên đổi nó thành gì? Tôi nghĩ với bản thân mình, không, tôi sẽ viết này trên tất cả các mã của tôi, vì vậy tôi muốn để lại bí danh loại chỉ đơn giản là Vector
. Điều đó có nghĩa là tôi phải thay đổi tên kiểu dữ liệu. Nhưng nếu tôi thay đổi điều đó, thì tôi cảm thấy tôi cũng nên thay đổi nhà xây dựng, điều này khiến mọi thứ trở nên khó hiểu hơn. Nhưng nếu nó cảm thấy khó xử khi làm cho hàm tạo có cùng tên với bí danh kiểu theo cách này.
Ngay bây giờ tôi có điều này:
type Scalar = Double
type Vector = VectorT Scalar
data VectorT a = Vector !a !a !a deriving (Eq, Show)
tôi nhặt T
tùy tiện (tôi đoán nó là viết tắt của "loại") nhưng tôi không như vậy chắc chắn về điều này. Thông thường khi tôi tài liệu chức năng tôi sẽ nói -- Calculate the magnitude of a Vector
, nhưng với VectorT
Tôi cảm thấy như tôi thực sự nên sử dụng rằng tên loại. Vì vậy, tôi nghỉ mát để chỉ đề cập đến họ là vectors
(không viết hoa) - ngoại trừ sau đó tôi cảm thấy như tôi phải áp dụng quy ước này cho mọi nhận xét cho mọi loại dữ liệu.
Có ai ở trong tình huống tương tự không? Bất cứ ai có thể nghĩ ra một giải pháp thanh lịch hơn trong trường hợp này?
Tôi đã thấy điều này trong một vài trường hợp, đặc biệt là gói 'language-c' sử dụng phương pháp này để xác định biểu diễn cây cú pháp của nó. Nếu bạn chưa bao giờ gặp phải phong cách trước khi nó có thể cảm thấy một chút khó xử, nhưng tôi hy vọng rằng mọi người quen với nó rất nhanh chóng. –
Chỉ có hai điều khó khăn trong Khoa học Máy tính: làm mất hiệu lực bộ nhớ cache và đặt tên cho mọi thứ. - Phil Karlton –
Có thể 'VectorOf Double' nếu bạn không thích' VectorT'. – kennytm