Tôi không nghĩ có bất kỳ thứ gì được tích hợp sẵn như vậy. May mắn thay, thật dễ dàng để sử dụng các hàm trợ giúp trong Hamlet. Ví dụ: nếu các mục của bạn là các chuỗi đơn giản, bạn chỉ có thể sử dụng Data.List.intercalate
để thêm dấu phẩy giữa chúng.
The values in the list are
#{intercalate ", " list}
and that is it.
Nếu bạn muốn làm những điều huyền ảo hơn, bạn có thể viết các chức năng để làm việc với các giá trị Hamlet. Ví dụ, đây là một hàm bổ sung dấu phẩy và "và" giữa các giá trị Hamlet trong một danh sách.
commaify [x] = x
commaify [x, y] = [hamlet|^{x} and ^{y}|]
commaify (x:xs) = [hamlet|^{x}, ^{commaify xs}|]
Cú pháp này chèn giá trị Hamlet vào giá trị khác. Bây giờ, chúng ta có thể sử dụng điều này để viết một danh sách được phân tách bằng dấu phẩy của các từ được gạch dưới.
The values in the list are
^{commaify (map underline list)}
and that is it.
Ở đây, underline
chỉ là một chức năng trợ giúp nhỏ để tạo nội dung thú vị hơn văn bản thuần túy.
underline word = [hamlet|<u>#{word}|]
Khi kết xuất, điều này sẽ cho kết quả như sau.
The values in the list are <u>foo</u>, <u>bar</u> and <u>baz</u> and that is it.
Cảm ơn, tôi đoán đó là tập hợp các giải pháp tốt, mặc dù không thỏa mãn như những gì mà Template Haskell cung cấp. Có lẽ tôi phải gửi một bản vá cho một biến '' 'loop''' đặc biệt cho ấp. –