Japanlloydmeta/diesel
Boilerplate-free, zero-overhead Tagless Final / typed-final / Finally Tagless DSLs in Scala
🚀 Diesel — Loại bỏ boilerplate cho DSL Tagless Final bằng macro Scala
Diesel cung cấp 2 macro annotation giúp viết DSL Tagless Final / typed-final mà không cần viết thủ công các đoạn mã lặp đi lặp lại.
Diesel là một thư viện Scala nhỏ nhưng mạnh mẽ, được viết bằng scala.meta, giúp giảm đáng kể lượượng mã cần viết khi xây dựng DSL theo kiểu Tagless Final hay typed-final. Thư viện này đặc biệt hữu ích khi bạn cần kết hợp nhiều DSL trong ngữ cảnh F[_] mà không muốn khai báo từng tham số trình thông dịch.
✨ Điểm nổi bật
- @diesel: Tự động tạo các phương thức hỗ trợ gọi DSL từ đối tượng đồng hành thông qua
import Ops._, giúp tránh việc truyền thủ công các trình thông dịch. - @ktrans: Thêm phương thức
transformKđể dễ dàng biến đổi một trình thông dịch từF[_]sangG[_]chỉ bằng một natural transformation. - Zero boilerplate: Không cần viết tay các phương thức tiếp hành hoặc aliasing các đối tượng DSL.
- Hỗ trợ kết hợp DSL: Dễ dàng dùng cùng với
@ktransđể xây dựng luồng xử lý phức tạp từ nhiều DSL nhỏ. - Dựa trên scala.meta: Hỗ trợ tốt cho IDE (như IntelliJ) và tương thích với tương lai của Scala.
- Chạy trên cả JVM và Scala.js: Có thể dùng trong các dự án web hoặc ứng dụng Scala.js.
💡 Vì sao đáng chú ý
Thay vì phải viết thủ công các đoạn mã lặp đi lặp lại để kết nối DSL với trình thông dịch, Diesel tự động sinh mã thông qua macro, giúp giảm lỗi và tăng tốc độ phát triển. Điều này đặc biệt hữu ích trong các dự án lớn cần kết hợp nhiều DSL như KVS, Logger, Fibonacci...
#Scala #TaglessFinal #Macro #DSL #scala.meta #cats #scalaz #TiniX
Similar Projects
Discover other similar projects and AI models.