RepositoryJavaESTây Ban Nha
tonivade

tonivade/purefun

Functional Programming library for Java

139sao
5fork
9issue
0lượt xem

Thành tựu nổi bật

Những danh hiệu mới nhất của dự án

1
TINIX TRENDING·Chủ đề: tagless-final

#1 Repository Của Tháng

1
TINIX TRENDING·Chủ đề: tuples

#1 Repository Của Tháng

1
TINIX TRENDING·Chủ đề: higher-kinded-types

#1 Repository Của Tháng

🧪 Purefun: Thư viện lập trình hàm thử nghiệm dành cho Java

Một dự án cá nhân khám phá các khái niệm lập trình hàm sâu như Higher Kinded Types và Type Classes ngay trên nền tảng Java.

Purefun là một thư viện lập trình hàm (rất nhỏ nhưng đầy tham vọng) dành cho Java, ban đầu là phần lõi của dự án zeromock. Dần dần, nó phát triển thành một thư viện độc lập với mục tiêu giúp người dùng Java tiếp cận và hiểu sâu hơn về các khái niệm như monads, type classes và higher kinded types — những điều thường chỉ có ở các ngôn ngữ như Scala hay Haskell. Dự án được lấy cảm hứng lớn từ thư viện Vavr, cũng như các dự án như Arrow, cats, fs2 và ZIO.

✨ Điểm nổi bật

  • Higher Kinded Types: Mô phỏng HKT trong Java bằng mã hoá đặc biệt, kèm bộ xử lý chú thích @HigherKind tự động sinh mã.
  • Type Classes: Hỗ trợ định nghĩa và sử dụng type classes một cách an toàn và trực quan.
  • Option: Thay thế Optional của Java, hỗ trợ giá trị some hoặc none.
  • Try: Mô phỏng Try của Scala, biểu diễn kết quả thành công hoặc thất bại.
  • Either: Cài đặt Either với hai trường hợp left và right.
  • Validation: Kết hợp nhiều kiểm tra bằng phương thức mapN.
  • Future: Phiên bản thử nghiệm của Future, chạy trên luồng ảo (virtual thread).
  • Trampoline: Đệ quy an toàn trên ngăn xếp bằng cách chuyển thành vòng lặp.
  • Tuples & Sequence: Hỗ trợ tuple từ 1 đến 5 phần tử và cấu trúc dữ liệu bất biến kiểu Sequence.

💡 Vì sao đáng chú ý

Purefun không chỉ là một bộ công cụ — nó là hành trình khám phá sâu sắc các khái niệm trừu tượng trong lập trình hàm, áp dụng chúng trên ngôn ngữ Java một cách sáng tạo. Đặc biệt đáng chú ý là cách nó giải quyết Higher Kinded Types — một tính năng không tồn tại nguyên sơ trong Java — thông qua mã hoá kiểu và hỗ trợ thế hệ mã tự động hóa qua annotation processor.

Dù chưa sẵn sàng cho môi trường sản xuất, Purefun mang lại giá trị lớn cho bất kỳ ai muốn học hỏi hoặc thí nghiệm với lập trình hàm trong Java. Nó không cố gắng thay thế các thư viện lớn, mà là một không gian thử nghiệm cá nhân, mở cửa cho đóng góp và phản hồi từ cộng đồng.


#Java #FunctionalProgramming #HigherKindedTypes #TypeClasses #Monads #OpenSource #Experimental #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.

RepositoryC#
louthy/language-ext

C# pure functional programming framework - come and get declarative!

7.1k
Oct 9, 2026
RepositoryKotlin
arrow-kt/arrow

The perfect companion for your Kotlin journey - Inspired by functional, data-oriented and concurrent programming

6.6k
Oct 23, 2026
RepositoryGo
IBM/fp-go

Functional programming library for Go 1.24+, inspired by fp-ts. Uses generic type aliases for a clean, composable API. Provides Option, Either, Result, IO, IOResult, Reader, and ReaderIOResult monads, plus optics (Lens, Prism, Traversal) for immutable data manipulation. Supports Functor, Applicative, and Monad abstractions with do-notation-style

2.0k
Oct 24, 2026
RepositoryJavaScript
getify/monio

The most powerful IO monad implementation in JS, possibly in any language!

1.1k
May 1, 2026
RepositorySwift
bow-swift/bow

🏹 Bow is a cross-platform library for Typed Functional Programming in Swift

659
Oct 9, 2022
RepositoryRust
TeaEntityLab/fpRust

Monad/MonadIO, Handler, Coroutine/doNotation, Functional Programming features for Rust

125
Sep 23, 2026
RepositoryTypeScript
baetheus/fun

Functional programming for deno and javascript. Monads, semigroups, optics, parsers, state management, yadda yadda yadda.

117
May 13, 2026
RepositoryScala
scalasummerschool/lectures

Learn Functional Programming in Scala

114
Nov 22, 2018
RepositoryScala
lloydmeta/diesel

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

113
May 24, 2017