Ấp dựa trên Template Haskell; cụ thể, một quasiquoter (ví dụ: [hamlet| ... |]
) được sử dụng cho mẫu nội tuyến và một mối nối (ví dụ: $(hamletFile "foo")
) được sử dụng để tạo mẫu từ tệp. Các biến này sau đó được truy cập với các tính năng nội tâm của Template Haskell.
này có những lợi ích vượt quá cho phép truy cập tự động để biến:
Các mẫu kết quả có thể sẽ hiệu quả hơn so với các phân tích và giải thích trong thời gian chạy, vì Ấp mẫu được biên dịch sang mã Haskell thường xuyên tại thời gian biên dịch.
Khi đọc mẫu từ tệp, tệp được phân tích cú pháp tại thời gian biên dịch và được nhúng vào kết quả nhị phân, do đó các mẫu không cần phải được lưu giữ trong cùng một vị trí trong thời gian chạy và giá trị của các mẫu được đảm bảo tĩnh.
Tôi tin rằng những lợi thế này áp dụng cho tất cả các mẫu gia đình Shakespeare. The Haddock documentation có thêm thông tin về các quasiquoters có sẵn và các mối nối.
Trong khi tôi không biết gì, đó có thể là mẫu haskell. Tất nhiên (đối với tôi) mẫu haskell là ma thuật sâu, vì vậy có bạn đi :) Một ví dụ đơn giản của cùng một điều là QuickCheck quickcheckAll: nó kỳ diệu biết về tất cả các bind_ * bindings của bạn và chạy chúng. –