RepositoryScalaJPNhật Bản
lloydmeta

lloydmeta/diesel

Boilerplate-free, zero-overhead Tagless Final / typed-final / Finally Tagless DSLs in Scala

113sao
6fork
0issue
0lượt xem

🚀 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[_] sang G[_] 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

Dự án tương tự

Khám phá các dự án và mô hình AI khác có sự tương đồng.

RepositoryScala
scalaz/scalaz

Principled Functional Programming in Scala

4.7k
Oct 19, 2026
RepositoryScala
scala-exercises/scala-exercises

The easy way to learn Scala.

2.6k
Sep 23, 2025
RepositoryScala
http4s/http4s

A minimal, idiomatic Scala interface for HTTP

2.6k
Oct 17, 2026
RepositoryScala
folone/poi.scala

Scala library for creating and manipulating Excel documents

177
Sep 24, 2026
RepositoryScala
djspiewak/shims

Seamless interop layer between cats and scalaz

173
Feb 26, 2021
RepositoryScala
krzemin/octopus

Scala library for boilerplate-free validation

153
Jun 24, 2024
RepositoryScala
japgolly/test-state

Scala Test-State.

144
Aug 12, 2024
RepositoryJava
tonivade/purefun

Functional Programming library for Java

139
Oct 17, 2026
RepositoryTypeScript
microsoft/vscode

Visual Studio Code

194.3k
Oct 25, 2026