This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/groovy-dev-site.git
The following commit(s) were added to refs/heads/asf-site by this push:
new e55abb8 2026/05/20 16:04:26: Generated dev website from
groovy-website@77d71ee
e55abb8 is described below
commit e55abb8c06ce60c721672cd7899e5697a543beeb
Author: jenkins <[email protected]>
AuthorDate: Wed May 20 16:04:26 2026 +0000
2026/05/20 16:04:26: Generated dev website from groovy-website@77d71ee
---
blog/groovy6-functional.html | 23 ++++++++++++-----------
search/search-index.json | 2 +-
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/blog/groovy6-functional.html b/blog/groovy6-functional.html
index c73b899..b3e9059 100644
--- a/blog/groovy6-functional.html
+++ b/blog/groovy6-functional.html
@@ -80,7 +80,7 @@ closures, immutable collections and
<code>java.util.stream.Stream</code>.</p>
</div>
<div class="paragraph">
<p>What Groovy 6 <em>does</em> do is close a handful of the gaps that send
-functional programmers reaching for FunctionalJava or highj when they
+functional programmers reaching for FunctionalJava or HighJ when they
work on the JVM. The new pieces fit together:</p>
</div>
<div class="ulist">
@@ -196,8 +196,9 @@ class Semigroup a => Monoid a where mempty ::
a</code></pre>
</div>
<div class="paragraph">
<p>In FunctionalJava you build a <code>Monoid<A></code> by passing a
combiner closure
-and a zero. In highj you import the typeclass instance for
<code>Monoid<µ></code>.
-In Groovy 6 the algebra moves <em>onto the method</em>:</p>
+and a zero. In HighJ you import the typeclass instance for
<code>Monoid<µ></code>.
+While you can also use those libraries from Groovy as is,
+you now also have the option of moving the algebra <em>onto the
method</em>:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -268,7 +269,7 @@ Haskell, but without lifting <code>add</code> into a
wrapper and unlifting the
result.</p>
</div>
<div class="paragraph">
-<p>The <code>Monoid</code>/<code>Semigroup</code> types from FunctionalJava
and highj are also
+<p>The <code>Monoid</code>/<code>Semigroup</code> types from FunctionalJava
and HighJ are also
recognised, which means existing FJ-shaped combiners flow through
<code>sumParallel</code> without rewriting.</p>
</div>
@@ -302,7 +303,7 @@ declarations, no lift / unlift:</p>
@TypeChecked(extensions = 'groovy.typecheckers.ModifiesChecker')
void post(BigDecimal amount) {
total += amount
- ledger << "+$amount"
+ ledger << "+$amount".toString()
}
@Pure
@@ -407,8 +408,8 @@ Validation<String, Integer> add(String a, String b) {
Validation.success(x + y)
}
}
-assert add('2', '3').successE() == 5
-assert add('hi', '3').failE() == 'not numeric: hi'</code></pre>
+assert add('2', '3').success() == 5
+assert add('hi', '3').fail() == 'not numeric: hi'</code></pre>
</div>
</div>
<div class="paragraph">
@@ -704,7 +705,7 @@ spec, not as a comment.</p>
<div class="sectionbody">
<div class="paragraph">
<p>For a JVM-resident FP audience, the comparison set is FunctionalJava,
-highj, and the language alternatives Scala and Kotlin.</p>
+HighJ, and the language alternatives Scala and Kotlin.</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
@@ -720,7 +721,7 @@ highj, and the language alternatives Scala and Kotlin.</p>
<th class="tableblock halign-left valign-top">Concept</th>
<th class="tableblock halign-left valign-top">Groovy 6</th>
<th class="tableblock halign-left valign-top">FunctionalJava</th>
-<th class="tableblock halign-left valign-top">highj</th>
+<th class="tableblock halign-left valign-top">HighJ</th>
<th class="tableblock halign-left valign-top">Scala</th>
<th class="tableblock halign-left valign-top">Haskell</th>
</tr>
@@ -843,8 +844,8 @@ to libraries.</p>
<div class="paragraph">
<p>For new code on the JVM, the takeaway is that <code>@Pure</code>,
<code>@Modifies</code>,
<code>@Associative</code> and <code>@Reducer</code> cover most of what teams
used
-FunctionalJava and highj for — and they do it on your own types,
-without inheritance and without lift/unlift. FunctionalJava and highj
+FunctionalJava and HighJ for — and they do it on your own types,
+without inheritance and without lift/unlift. FunctionalJava and HighJ
remain useful when you want the libraries' richer value-level
combinators (notably <code>Validation</code> for applicative-style error
accumulation, which Groovy 6 happily embeds in <code>DO</code>).</p>
diff --git a/search/search-index.json b/search/search-index.json
index 27f8393..653c5f8 100644
--- a/search/search-index.json
+++ b/search/search-index.json
@@ -240,7 +240,7 @@
{
"id": "blog/groovy6-functional.html",
"title": "The Apache Groovy programming language - Blogs - Groovy 6
features for Functional Programmers",
- "content": "The Apache Groovy programming language - Blogs - Groovy 6
features for Functional Programmers Socialize Discuss on the mailing list
Groovy on X Groovy on Bluesky Groovy on Mastodon Groovy on LinkedIn Events and
conferences Source code on GitHub Report issues in Jira Stack Overflow
questions Slack Community You are using an outdated browser. Please upgrade
your browser to improve your experience. Apache Groovy™ Learn
Documentation Download Support Contribute Ecos [...]
+ "content": "The Apache Groovy programming language - Blogs - Groovy 6
features for Functional Programmers Socialize Discuss on the mailing list
Groovy on X Groovy on Bluesky Groovy on Mastodon Groovy on LinkedIn Events and
conferences Source code on GitHub Report issues in Jira Stack Overflow
questions Slack Community You are using an outdated browser. Please upgrade
your browser to improve your experience. Apache Groovy™ Learn
Documentation Download Support Contribute Ecos [...]
"url": "blog/groovy6-functional.html",
"site": "dev"
},