Skip to content

Commit e1f3a0b

Browse files
authored
Create gh-pages branch via GitHub
1 parent 6fe1d9a commit e1f3a0b

File tree

6 files changed

+527
-49
lines changed

6 files changed

+527
-49
lines changed

images/arrow-down.png

216 Bytes
Loading

images/octocat-small.png

357 Bytes
Loading

index.html

Lines changed: 83 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
1-
<!DOCTYPE html>
1+
<!doctype html>
22
<html>
33
<head>
4-
<meta charset='utf-8'>
4+
<meta charset="utf-8">
55
<meta http-equiv="X-UA-Compatible" content="chrome=1">
6-
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
7-
<link href='https://fonts.googleapis.com/css?family=Architects+Daughter' rel='stylesheet' type='text/css'>
8-
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
9-
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
10-
<link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print">
6+
<title>Lambda by palatable</title>
117

8+
<link rel="stylesheet" href="stylesheets/styles.css">
9+
<link rel="stylesheet" href="stylesheets/github-light.css">
10+
<script src="javascripts/scale.fix.js"></script>
11+
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
1212
<!--[if lt IE 9]>
1313
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
1414
<![endif]-->
15-
16-
<title>Lambda by palatable</title>
1715
</head>
18-
1916
<body>
20-
<header>
21-
<div class="inner">
22-
<h1>Lambda</h1>
23-
<h2>Functional patterns for Java</h2>
24-
<a href="https://github.com/palatable/lambda" class="button"><small>View project on</small> GitHub</a>
25-
</div>
26-
</header>
27-
28-
<div id="content-wrapper">
29-
<div class="inner clearfix">
30-
<section id="main-content">
31-
<h1>
17+
<div class="wrapper">
18+
<header>
19+
<h1 class="header">Lambda</h1>
20+
<p class="header">Functional patterns for Java</p>
21+
22+
<ul>
23+
<li class="download"><a class="buttons" href="https://github.com/palatable/lambda/zipball/master">Download ZIP</a></li>
24+
<li class="download"><a class="buttons" href="https://github.com/palatable/lambda/tarball/master">Download TAR</a></li>
25+
<li><a class="buttons github" href="https://github.com/palatable/lambda">View On GitHub</a></li>
26+
</ul>
27+
28+
<p class="header">This project is maintained by <a class="header name" href="https://github.com/palatable">palatable</a></p>
29+
30+
31+
</header>
32+
<section>
33+
<h1>
3234
<a id="λ" class="anchor" href="#%CE%BB" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>λ</h1>
3335

3436
<p><a href="https://travis-ci.org/palatable/lambda"><img src="https://travis-ci.org/palatable/lambda.svg" alt="Build Status"></a>
@@ -55,9 +57,15 @@ <h4>
5557
</ul>
5658
</li>
5759
<li><a href="#hmaps">HMaps</a></li>
60+
<li>
61+
<a href="#coproducts">CoProducts</a>
62+
63+
<ul>
5864
<li><a href="#either">Either</a></li>
5965
</ul>
6066
</li>
67+
</ul>
68+
</li>
6169
<li><a href="#lenses">Lenses</a></li>
6270
<li>
6371
<a href="#notes">Notes</a> </li>
@@ -95,12 +103,12 @@ <h2>
95103
<div class="highlight highlight-text-xml"><pre>&lt;<span class="pl-ent">dependency</span>&gt;
96104
&lt;<span class="pl-ent">groupId</span>&gt;com.jnape.palatable&lt;/<span class="pl-ent">groupId</span>&gt;
97105
&lt;<span class="pl-ent">artifactId</span>&gt;lambda&lt;/<span class="pl-ent">artifactId</span>&gt;
98-
&lt;<span class="pl-ent">version</span>&gt;1.5.1&lt;/<span class="pl-ent">version</span>&gt;
106+
&lt;<span class="pl-ent">version</span>&gt;1.5.3&lt;/<span class="pl-ent">version</span>&gt;
99107
&lt;/<span class="pl-ent">dependency</span>&gt;</pre></div>
100108

101109
<p><code>build.gradle</code> (<a href="https://docs.gradle.org/current/userguide/dependency_management.html">Gradle</a>):</p>
102110

103-
<div class="highlight highlight-source-groovy-gradle"><pre>compile <span class="pl-c1">group</span>: <span class="pl-s"><span class="pl-pds">'</span>com.jnape.palatable<span class="pl-pds">'</span></span>, <span class="pl-c1">name</span>: <span class="pl-s"><span class="pl-pds">'</span>lambda<span class="pl-pds">'</span></span>, <span class="pl-c1">version</span>: <span class="pl-s"><span class="pl-pds">'</span>1.5.1<span class="pl-pds">'</span></span></pre></div>
111+
<div class="highlight highlight-source-groovy-gradle"><pre>compile <span class="pl-c1">group</span>: <span class="pl-s"><span class="pl-pds">'</span>com.jnape.palatable<span class="pl-pds">'</span></span>, <span class="pl-c1">name</span>: <span class="pl-s"><span class="pl-pds">'</span>lambda<span class="pl-pds">'</span></span>, <span class="pl-c1">version</span>: <span class="pl-s"><span class="pl-pds">'</span>1.5.3<span class="pl-pds">'</span></span></pre></div>
104112

105113
<h2>
106114
<a id="examples" class="anchor" href="#examples" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a><a name="examples">Examples</a>
@@ -151,7 +159,7 @@ <h2>
151159

152160
<span class="pl-k">Fn1&lt;<span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>&gt;</span> noOp <span class="pl-k">=</span> add<span class="pl-k">.</span>then(subtract);
153161
<span class="pl-c">// same as</span>
154-
<span class="pl-k">Fn1&lt;<span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>&gt;</span> alsoNoOp <span class="pl-k">=</span> subtract<span class="pl-k">.</span>compose(subtract);</pre></div>
162+
<span class="pl-k">Fn1&lt;<span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>&gt;</span> alsoNoOp <span class="pl-k">=</span> subtract<span class="pl-k">.</span>compose(add);</pre></div>
155163

156164
<p>And partially apply some:</p>
157165

@@ -217,6 +225,21 @@ <h4>
217225
<span class="pl-k">Tuple4&lt;<span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>&gt;</span> tuple4 <span class="pl-k">=</span> <span class="pl-smi">HList</span><span class="pl-k">.</span>tuple(<span class="pl-c1">1</span>, <span class="pl-c1">2</span>, <span class="pl-c1">3</span>, <span class="pl-c1">4</span>);
218226
<span class="pl-k">Tuple5&lt;<span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Integer</span>&gt;</span> tuple5 <span class="pl-k">=</span> <span class="pl-smi">HList</span><span class="pl-k">.</span>tuple(<span class="pl-c1">1</span>, <span class="pl-c1">2</span>, <span class="pl-c1">3</span>, <span class="pl-c1">4</span>, <span class="pl-c1">5</span>);</pre></div>
219227

228+
<p><code>Index</code> can be used for type-safe retrieval and updating of elements at specific indexes:</p>
229+
230+
<div class="highlight highlight-source-java"><pre><span class="pl-k">HCons&lt;<span class="pl-smi">Integer</span>, <span class="pl-k">HCons&lt;<span class="pl-smi">String</span>, <span class="pl-k">HCons&lt;<span class="pl-smi">Character</span>, <span class="pl-smi">HNil</span>&gt;</span>&gt;</span>&gt;</span> hList <span class="pl-k">=</span> cons(<span class="pl-c1">1</span>, cons(<span class="pl-s"><span class="pl-pds">"</span>2<span class="pl-pds">"</span></span>, cons(<span class="pl-s"><span class="pl-pds">'</span>3<span class="pl-pds">'</span></span>, nil())));
231+
<span class="pl-k">HCons&lt;<span class="pl-smi">Integer</span>, <span class="pl-k">Tuple2&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Character</span>&gt;</span>&gt;</span> tuple <span class="pl-k">=</span> tuple(<span class="pl-c1">1</span>, <span class="pl-s"><span class="pl-pds">"</span>2<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">'</span>3<span class="pl-pds">'</span></span>);
232+
<span class="pl-k">Tuple5&lt;<span class="pl-smi">Integer</span>, <span class="pl-smi">String</span>, <span class="pl-smi">Character</span>, <span class="pl-smi">Double</span>, <span class="pl-smi">Boolean</span>&gt;</span> longerHList <span class="pl-k">=</span> tuple(<span class="pl-c1">1</span>, <span class="pl-s"><span class="pl-pds">"</span>2<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">'</span>3<span class="pl-pds">'</span></span>, <span class="pl-c1">4.0d</span>, <span class="pl-c1">false</span>);
233+
234+
<span class="pl-k">Index&lt;<span class="pl-smi">Character</span>, <span class="pl-k">HCons&lt;<span class="pl-smi">Integer</span>, ? extends <span class="pl-k">HCons&lt;<span class="pl-smi">String</span>, ? extends <span class="pl-k">HCons&lt;<span class="pl-smi">Character</span>, ?&gt;</span>&gt;</span>&gt;</span>&gt;</span> characterIndex <span class="pl-k">=</span>
235+
<span class="pl-smi">Index</span><span class="pl-k">.</span><span class="pl-k">&lt;</span><span class="pl-smi">Character</span><span class="pl-k">&gt;</span>index()<span class="pl-c1">.</span><span class="pl-k">&lt;</span><span class="pl-smi">String</span><span class="pl-k">&gt;</span>after()<span class="pl-k">.</span>after();
236+
237+
characterIndex<span class="pl-k">.</span>get(hList); <span class="pl-c">// '3'</span>
238+
characterIndex<span class="pl-k">.</span>get(tuple); <span class="pl-c">// '3'</span>
239+
characterIndex<span class="pl-k">.</span>get(longerHList); <span class="pl-c">// '3'</span>
240+
241+
characterIndex<span class="pl-k">.</span>set(<span class="pl-s"><span class="pl-pds">'</span>4<span class="pl-pds">'</span></span>, hList); <span class="pl-c">// HList{ 1 :: "2" :: '4' }</span></pre></div>
242+
220243
<p>Finally, all <code>Tuple*</code> classes are instances of both <code>Functor</code> and <code>Bifunctor</code>:</p>
221244

222245
<div class="highlight highlight-source-java"><pre><span class="pl-k">Tuple2&lt;<span class="pl-smi">Integer</span>, <span class="pl-smi">String</span>&gt;</span> mappedTuple2 <span class="pl-k">=</span> tuple(<span class="pl-c1">1</span>, <span class="pl-c1">2</span>)<span class="pl-k">.</span>biMap(x <span class="pl-k">-</span><span class="pl-k">&gt;</span> x <span class="pl-k">+</span> <span class="pl-c1">1</span>, <span class="pl-smi">Object</span><span class="pl-k">::</span>toString);
@@ -245,19 +268,44 @@ <h3>
245268
<span class="pl-k">Optional&lt;<span class="pl-smi">Integer</span>&gt;</span> intValue <span class="pl-k">=</span> hmap<span class="pl-k">.</span>get(intKey); <span class="pl-c">// Optional[1]</span>
246269
<span class="pl-k">Optional&lt;<span class="pl-smi">Integer</span>&gt;</span> anotherIntValue <span class="pl-k">=</span> hmap<span class="pl-k">.</span>get(anotherIntKey); <span class="pl-c">// Optional.empty</span></pre></div>
247270

271+
<h3>
272+
<a id="coproducts" class="anchor" href="#coproducts" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a><a name="coproducts">CoProducts</a>
273+
</h3>
274+
275+
<p><code>CoProduct</code>s generalize unions of disparate types in a single consolidated type. </p>
276+
277+
<div class="highlight highlight-source-java"><pre><span class="pl-k">CoProduct3&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Character</span>&gt;</span> string <span class="pl-k">=</span> <span class="pl-smi">CoProduct3</span><span class="pl-k">.</span>a(<span class="pl-s"><span class="pl-pds">"</span>string<span class="pl-pds">"</span></span>);
278+
<span class="pl-k">CoProduct3&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Character</span>&gt;</span> integer <span class="pl-k">=</span> <span class="pl-smi">CoProduct3</span><span class="pl-k">.</span>b(<span class="pl-c1">1</span>);
279+
<span class="pl-k">CoProduct3&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Character</span>&gt;</span> character <span class="pl-k">=</span> <span class="pl-smi">CoProduct3</span><span class="pl-k">.</span>c(<span class="pl-s"><span class="pl-pds">'</span>a<span class="pl-pds">'</span></span>);</pre></div>
280+
281+
<p>Rather than supporting explicit value unwrapping, which would necessarily jeopardize type safety, <code>CoProduct</code>s support a <code>match</code> method that takes one function per possible value type and maps it to a final common result type:</p>
282+
283+
<div class="highlight highlight-source-java"><pre><span class="pl-k">CoProduct3&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Character</span>&gt;</span> string <span class="pl-k">=</span> <span class="pl-smi">CoProduct3</span><span class="pl-k">.</span>a(<span class="pl-s"><span class="pl-pds">"</span>string<span class="pl-pds">"</span></span>);
284+
<span class="pl-k">CoProduct3&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Character</span>&gt;</span> integer <span class="pl-k">=</span> <span class="pl-smi">CoProduct3</span><span class="pl-k">.</span>b(<span class="pl-c1">1</span>);
285+
<span class="pl-k">CoProduct3&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Character</span>&gt;</span> character <span class="pl-k">=</span> <span class="pl-smi">CoProduct3</span><span class="pl-k">.</span>c(<span class="pl-s"><span class="pl-pds">'</span>a<span class="pl-pds">'</span></span>);
286+
287+
<span class="pl-smi">Integer</span> result <span class="pl-k">=</span> string<span class="pl-k">.</span><span class="pl-k">&lt;</span><span class="pl-smi">Integer</span><span class="pl-k">&gt;</span>match(<span class="pl-smi">String</span><span class="pl-k">::</span>length, identity(), <span class="pl-smi">Character</span><span class="pl-k">::</span>charCount); <span class="pl-c">// 6</span></pre></div>
288+
289+
<p>Additionally, because a <code>CoProduct2&lt;A, B&gt;</code> guarantees a subset of a <code>CoProduct3&lt;A, B, C&gt;</code>, the <code>diverge</code> method exists between <code>CoProduct</code> types of single magnitude differences to make it easy to use a more convergent <code>CoProduct</code> where a more divergent <code>CoProduct</code> is expected:</p>
290+
291+
<div class="highlight highlight-source-java"><pre><span class="pl-k">CoProduct2&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>&gt;</span> coProduct2 <span class="pl-k">=</span> <span class="pl-smi">CoProduct2</span><span class="pl-k">.</span>a(<span class="pl-s"><span class="pl-pds">"</span>string<span class="pl-pds">"</span></span>);
292+
<span class="pl-k">CoProduct3&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>, <span class="pl-smi">Character</span>&gt;</span> coProduct3 <span class="pl-k">=</span> coProduct2<span class="pl-k">.</span>diverge(); <span class="pl-c">// still just the coProduct2 value, adapted to the coProduct3 shape</span></pre></div>
293+
294+
<p>There are <code>CoProduct</code> specializations for type unions of up to 5 different types: <code>CoProduct2</code> through <code>CoProduct5</code>, respectively.</p>
295+
248296
<h3>
249297
<a id="either" class="anchor" href="#either" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a><a name="either">Either</a>
250298
</h3>
251299

252-
<p>Binary tagged unions are represented as <code>Either&lt;L, R&gt;</code>s, which resolve to one of two possible values: a <code>Left</code> value wrapping an <code>L</code>, or a <code>Right</code> value wrapping an <code>R</code> (typically an exceptional value or a successful value, respectively).</p>
300+
<p><code>Either&lt;L, R&gt;</code> represents a specialized <code>CoProduct2&lt;L, R&gt;</code>, which resolve to one of two possible values: a left value wrapping an <code>L</code>, or a right value wrapping an <code>R</code> (typically an exceptional value or a successful value, respectively).</p>
253301

254-
<p>Rather than supporting explicit value unwrapping, <code>Either</code> supports many useful comprehensions to help facilitate type-safe interactions. For example, <code>Either#match</code> is used to resolve an <code>Either&lt;L,R&gt;</code> to a different type. </p>
302+
<p>As with <code>CoProduct2</code>, rather than supporting explicit value unwrapping, <code>Either</code> supports many useful comprehensions to help facilitate type-safe interactions: </p>
255303

256304
<div class="highlight highlight-source-java"><pre><span class="pl-k">Either&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>&gt;</span> right <span class="pl-k">=</span> <span class="pl-smi">Either</span><span class="pl-k">.</span>right(<span class="pl-c1">1</span>);
257305
<span class="pl-k">Either&lt;<span class="pl-smi">String</span>, <span class="pl-smi">Integer</span>&gt;</span> left <span class="pl-k">=</span> <span class="pl-smi">Either</span><span class="pl-k">.</span>left(<span class="pl-s"><span class="pl-pds">"</span>Head fell off<span class="pl-pds">"</span></span>);
258306

259-
<span class="pl-smi">Boolean</span> successful <span class="pl-k">=</span> right<span class="pl-k">.</span>match(l <span class="pl-k">-</span><span class="pl-k">&gt;</span> <span class="pl-c1">false</span>, r <span class="pl-k">-</span><span class="pl-k">&gt;</span> <span class="pl-c1">true</span>);
260-
<span class="pl-c">//-&gt; true</span>
307+
<span class="pl-smi">Integer</span> result <span class="pl-k">=</span> right<span class="pl-k">.</span>orElse(<span class="pl-k">-</span><span class="pl-c1">1</span>);
308+
<span class="pl-c">//-&gt; 1</span>
261309

262310
<span class="pl-k">List&lt;<span class="pl-smi">Integer</span>&gt;</span> values <span class="pl-k">=</span> left<span class="pl-k">.</span>match(l <span class="pl-k">-</span><span class="pl-k">&gt;</span> <span class="pl-smi">Collections</span><span class="pl-k">.</span>emptyList(), <span class="pl-smi">Collections</span><span class="pl-k">::</span>singletonList);
263311
<span class="pl-c">//-&gt; [] </span></pre></div>
@@ -345,25 +393,12 @@ <h2>
345393
</h2>
346394

347395
<p><em>lambda</em> is part of <a href="http://www.github.com/palatable">palatable</a>, which is distributed under <a href="http://choosealicense.com/licenses/mit/">The MIT License</a>.</p>
348-
</section>
349-
350-
<aside id="sidebar">
351-
<a href="https://github.com/palatable/lambda/zipball/master" class="button">
352-
<small>Download</small>
353-
.zip file
354-
</a>
355-
<a href="https://github.com/palatable/lambda/tarball/master" class="button">
356-
<small>Download</small>
357-
.tar.gz file
358-
</a>
359-
360-
<p class="repo-owner"><a href="https://github.com/palatable/lambda"></a> is maintained by <a href="https://github.com/palatable">palatable</a>.</p>
361-
362-
<p>This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the Architect theme by <a href="https://twitter.com/jasonlong">Jason Long</a>.</p>
363-
</aside>
364-
</div>
396+
</section>
397+
<footer>
398+
<p><small>Hosted on <a href="https://pages.github.com">GitHub Pages</a> using the Dinky theme</small></p>
399+
</footer>
365400
</div>
366-
367-
401+
<!--[if !IE]><script>fixScale(document);</script><![endif]-->
402+
368403
</body>
369404
</html>

javascripts/scale.fix.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
fixScale = function(doc) {
2+
3+
var addEvent = 'addEventListener',
4+
type = 'gesturestart',
5+
qsa = 'querySelectorAll',
6+
scales = [1, 1],
7+
meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
8+
9+
function fix() {
10+
meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
11+
doc.removeEventListener(type, fix, true);
12+
}
13+
14+
if ((meta = meta[meta.length - 1]) && addEvent in doc) {
15+
fix();
16+
scales = [.25, 1.6];
17+
doc[addEvent](type, fix, true);
18+
}
19+
20+
};

0 commit comments

Comments
 (0)