-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathoverview.html
More file actions
103 lines (97 loc) · 5.25 KB
/
overview.html
File metadata and controls
103 lines (97 loc) · 5.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Cat - Overview</title>
<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" />
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="./css/syntax.css" />
<link rel="stylesheet" type="text/css" href="./css/custom.css" />
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="page-header">
<h1>Cat <small>:: C++14 functional library</small></h1>
<div style="margin-top:20px;">
<div class="row">
<div class="col-md-2"><a href="./"><i class="fa fa-home fa-lg fa-fw"></i> Home</a></div>
<div class="col-md-2"><a href="./overview.html"><i class="fa fa-male fa-lg fa-fw"></i> Overview</a></div>
<div class="col-md-2"><a href="./documentation.html"><i class="fa fa-pencil fa-lg fa-fw"></i> Doc</a></div>
<div class="col-md-2"><a href="./tags.html"><i class="fa fa-tag fa-lg fa-fw"></i> Tags</a></div>
<div class="col-md-2"><a href="http://github.com/cat/cat"><i class="fa fa-github fa-lg fa-fw"></i> Download</a></div>
<div class="col-md-2"><a href="https://twitter.com/intent/follow?screen_name=NicolaBonelli"><i class="fa fa-twitter fa-lg fa-fw"></i> FollowMe</a></div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-10 col-md-offset-1">
<h3 id="rationale">Rationale</h3>
<p>The purpose of Cat library is twofold:</p>
<ul>
<li>to provide utility classes and functions that enable the functional programming paradigm in C++.</li>
<li>to implement an extensible framework of type classes to attain a better reusability of code through the principles of category theory.</li>
</ul>
<h3 id="features">Features</h3>
<p>The Cat library:</p>
<ul>
<li>is lightweight. Each function and object shipped with the library takes advantage of modern C++ features, such as <code>constexpr</code> constructs, movability, perfect forwarding, etc.</li>
<li>is written in portable C++14 without macro black-magic, whereas template meta-programming is restricted only to the implementation of type traits.</li>
<li>implements type traits tailored for generic and functional programming (e.g. <code>is_container</code>, <code>is_associative_container</code>, <code>function_type</code>, <code>function_arity</code>, <code>return_type</code>, <code>is_callable</code> to mention a few).</li>
<li>provides utilities, like callable wrappers, which enable functional composition and currying on-top-of any kind of callable types (including <code>std::bind</code> expressions and generic lambdas).</li>
<li>provides functions that operate on <code>std::tuple</code> and generic containers.</li>
<li>provides utilities that enable perfect forwarding from L/R value containers by means of <code>forward_as</code> and <code>forward_iterator</code>.<br /></li>
<li>includes an extensible framework for building type classes and provides the implementation of the following ones:
<ul>
<li>Functor</li>
<li>Bifunctor</li>
<li>Applicative</li>
<li>Alternative</li>
<li>Monoid</li>
<li>Monad</li>
<li>MonadPlus</li>
<li>Foldable</li>
<li>Show</li>
<li>Read</li>
<li>…</li>
</ul></li>
<li>includes instances of standard C++14 and Technical Specification (TS) containers/types for the above-mentioned type classes.</li>
</ul>
<h3 id="notes">Notes</h3>
<p>At the present moment the Cat library is tested under Linux with both glibcxx and libc++ library and with the following compilers:</p>
<ul>
<li>gcc-4.9</li>
<li>gcc-5</li>
<li>clang-3.5</li>
<li>clang 3.6</li>
</ul>
<h3 id="acknowledgements">Acknowledgements</h3>
<p>The Cat library takes inspiration from the following projects:</p>
<ul>
<li>The <a href="https://www.haskell.org">Haskell</a> language</li>
<li><a href="https://github.com/pfultz2/Fit">Fit library</a> by Paul Fultz II</li>
<li><a href="https://github.com/beark/ftl">FTL library</a> by Bjorn Aili</li>
</ul>
</div>
</div>
</div>
<div class="container">
<div class="col-md-10 col-md-offset-1">
<div class="modal-footer">
<p>Cat Library is distributed under the MIT License. This site is generated by <a href="http://jaspervdj.be/hakyll">Hakyll</a>.</p>
</div>
</div>
</div>
</body>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-60766262-1', 'auto');
ga('send', 'pageview');
</script>
</html>