Tôi muốn loại bỏ các từ khóa if ... then ... else ...
, bởi vì tôi đang nhúng một ngôn ngữ/DSL trong Haskell. if
, then
và else
truyền đạt nhiều ý nghĩa trong nhiều miền và sẽ tuyệt vời nếu tôi xác định lại (hoặc để chúng không xác định) để phản ánh bản chất của ngôn ngữ/miền.Làm cách nào tôi có thể xóa các từ khóa "if ... then ... else ..." trong Haskell (GHC)?
Tôi đã tìm kiếm trên Google và stackoverflow, nhưng không tìm thấy gì cả. (Tôi đã tìm thấy một chuỗi cũ về lý do tại sao if ... then ... else ...
được bao gồm làm từ khoá trong Haskell.)
IDE của tôi ở Leksah, và nếu từ khóa có thể bị xóa, bạn cũng nên thay đổi if ... then ... else ...
từ khóa trở lại phông chữ/màu sắc/không gấp.
Tôi đã thử quy ước đặt tên là if'
cho if
v.v. Nó không cảm thấy là tốt, đặc biệt là khi tôi muốn xác định if
và if'
và phải xác định if'
và if''
thay thế hoặc if1
và if2
. Sự hiện diện của cả hai số if'
và if
cũng có thể gây nhầm lẫn. (Sự nhầm lẫn không phải là một vấn đề nghiêm trọng trong tình huống của tôi khi người dùng DSL là lập trình viên Haskell, nhưng tôi cho rằng nó có thể giúp đỡ trong các tình huống khác).
Tóm tắt các câu trả lời cho đến nay:
- Sử dụng tiện ích
RebindableSyntax
để GHC. Không phải là chung chung như loại bỏ các từ khóa: cú pháp của Haskell nếu-thì-else được giữ lại. (Frerich Raabe) - Cách giải quyết: Sử dụng các từ/tên rất giống nhau, bằng cách sử dụng
data Conditional b a = If b (Then a) (Else a)
(chỉ áp dụng trong một số ngữ cảnh). (C. A. McCann)
Nếu RebindableSyntax
là một tính năng tương đối mới, thì đó là khó có thể tìm thấy một cách tổng quát hơn, ít nhất là không cho đến phiên bản tiếp theo của GHC.
Bạn có thực sự muốn _remove_ từ khóa của ngôn ngữ để trình biên dịch có thể coi chúng là biến không? – eternalmatt
Nếu DSL của bạn đủ khác biệt so với Haskell xung quanh, và hoạt động bằng cách xây dựng một số loại cấu trúc dữ liệu biểu diễn các biểu thức trong DSL, bạn cũng có thể chỉ sử dụng một kiểu dữ liệu. ví dụ, một cái gì đó như 'dữ liệu Có điều kiện b a = Nếu b (Sau đó a) (Khác a)'. –
Bạn nên nhớ rằng bạn không nên thiết kế DSL của bạn để làm cho mã trông giống như tiếng Anh, bạn nên thiết kế chúng để làm cho nó dễ dàng để xem nếu mã không hoạt động. – Anonymous