1<!DOCTYPE html> 2<html> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 5 <title>Bow</title> 6 <link rel="canonical" href="https://bow-swift.io/next/docs" /> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 <meta name="description" content="Bow is a library for Typed Functional Programming in Swift"> 9 <meta name="keywords" content="functional-programming, swift-library, monads, monad-transformers, functional-data-structure, swift, fp-types, adt, free-monads, tagless-final, mtl, for-comprehension, category-theory"> 10 <meta property="og:image" /> 11 <meta property="og:title" content="Bow"/> 12 <meta property="og:site_name" content="Bow"/> 13 <meta property="og:url" content="https://bow-swift.io/"/> 14 <meta property="og:type" content="website"/> 15 <meta property="og:description" content="Bow is a library for Typed Functional Programming in Swift"/> 16 <meta property="og:keywords" content="functional-programming, swift-library, monads, monad-transformers, functional-data-structure, swift, fp-types, adt, free-monads, tagless-final, mtl, for-comprehension, category-theory"/> 17 <meta name="twitter:text:description" content="Bow is a library for Typed Functional Programming in Swift"/> 18 <meta name="twitter:card" content="summary_large_image"> 19 <meta name="twitter:site" content="@bow_swift"> 20 <meta name="twitter:creator" content="@bow_swift"> 21 <meta name="twitter:image" content="https://bow-swift.io/img/twitter-card.png"/> 22 <!-- Bow version metadata --> 23 <meta name="bow-version" data-title="next"/> 24
24<script src="../ajax/libs/jquery/3.3.1/jquery.min.js"></script>
24 25 <link rel="stylesheet" href="../releases/v5.6.3/css/all.css" > 26 <!-- Favicon --> 27 <link rel="shortcut icon" href="../next/img/favicon.png"> 28 <!-- Main css --> 29 <link rel="stylesheet" type="text/css" href="../next/css/docs.css"> 30 <!-- Highlighting css --> 31 <link rel="stylesheet" type="text/css" href="../next/api-docs/css/highlight.css"> 32 <!-- Code to manage version information --> 33
33<script src="../next/js/doc-versions.js" defer></script>
33 34 <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 64 bytes, lines 34-35
34 35<script async src="https://www.googletagmanager.com/gtag/js?id=
35UA-18433785-19
vendor: 12 bytes, line 35
35"></script>
36<script> 37
vendor: 133 bytes, lines 37-40
37window.dataLayer = window.dataLayer || []; 38 function gtag(){dataLayer.push(arguments);} 39 gtag('js', new Date()); 40 gtag('config', '
40UA-18433785-19
vendor: 4 bytes, line 40
40');
41</script>
41 42</head> 43<body id="doc-body"> 44<div id="wrapper"> 45 <div id="sidebar-wrapper"> 46 <div class="sidebar-brand"> 47 <a class="brand" href="../next"> 48 <img src="../next/img/icon.svg" alt="Bow logo"> 49 <span>Bow</span> 50 </a> 51 <button type="button" id="main-toggle" class="sidebar-toggle"> 52 <span class="close"></span> 53 </button> 54 </div> 55 <div id="version-dropdown"> 56 <button class="button link-like" onclick="displayToggle(event)" title="Documentation"> 57 <span>Bow version</span> 58 <span id="bow-version"> 59 next 60 </span> 61 </button> 62 <ul class="dropdown dropdown-content"> 63 <li class="dropdown-item"> 64 <a class="dropdown-item-link" href="../docs"> 65 <span> 66 0.8.0 67 </span> 68 </a> 69 </li> 70 <li class="dropdown-item"> 71 <a class="dropdown-item-link" href="../next/docs"> 72 <span> 73 next 74 </span> 75 </a> 76 </li> 77 </ul> 78</div> 79 <ul class="sidebar-nav"> 80 <li class="sidebar-nav-item"> 81 <a href="#"> 82 <span>Quick start</span> 83 <i class="fa fa-angle-right"></i> 84 </a> 85 <ul> 86 <li> 87 <a href="../next/docs/quick-start/getting-started"> 88 <i class="fa fa-circle"></i> 89 <span>Getting started</span> 90 </a> 91 </li> 92 <li> 93 <a href="../next/docs/quick-start/modules"> 94 <i class="fa fa-circle"></i> 95 <span>Modules</span> 96 </a> 97 </li> 98 <li> 99 <a href="../next/docs/quick-start/resources"> 100 <i class="fa fa-circle"></i> 101 <span>Resources</span> 102 </a> 103 </li> 104 </ul> 105 </li> 106 <li class="sidebar-nav-item"> 107 <a href="#"> 108 <span>FP concepts</span> 109 <i class="fa fa-angle-right"></i> 110 </a> 111 <ul> 112 <li> 113 <a href="../next/docs/fp-concepts/glossary"> 114 <i class="fa fa-circle"></i> 115 <span>Glossary</span> 116 </a> 117 </li> 118 <li> 119 <a href="../next/docs/fp-concepts/functions-vs-procedures"> 120 <i class="fa fa-circle"></i> 121 <span>Functions vs Procedures</span> 122 </a> 123 </li> 124 <li> 125 <a href="../next/docs/fp-concepts/higher-kinded-types"> 126 <i class="fa fa-circle"></i> 127 <span>Higher Kinded Types</span> 128 </a> 129 </li> 130 <li> 131 <a href="../next/docs/fp-concepts/type-classes"> 132 <i class="fa fa-circle"></i> 133 <span>Type classes</span> 134 </a> 135 </li> 136 <li> 137 <a href="../next/docs/fp-concepts/data-types"> 138 <i class="fa fa-circle"></i> 139 <span>Data types</span> 140 </a> 141 </li> 142 <li> 143 <a href="../next/docs/fp-concepts/rank-n-polymorphism"> 144 <i class="fa fa-circle"></i> 145 <span>Rank-N polymorphism</span> 146 </a> 147 </li> 148 </ul> 149 </li> 150 <li class="sidebar-nav-item"> 151 <a href="#"> 152 <span>Composition</span> 153 <i class="fa fa-angle-right"></i> 154 </a> 155 <ul> 156 <li> 157 <a href="../next/docs/composition/composition-overview"> 158 <i class="fa fa-circle"></i> 159 <span>Composition Overview</span> 160 </a> 161 </li> 162 <li> 163 <a href="../next/docs/composition/composing-functions"> 164 <i class="fa fa-circle"></i>
165 <span>Composing functions</span> 166 </a> 167 </li> 168 <li> 169 <a href="../next/docs/composition/combining-values-of-the-same-type"> 170 <i class="fa fa-circle"></i> 171 <span>Combining values of the same type</span> 172 </a> 173 </li> 174 <li> 175 <a href="../next/docs/composition/transforming-data"> 176 <i class="fa fa-circle"></i> 177 <span>Transforming data</span> 178 </a> 179 </li> 180 <li> 181 <a href="../next/docs/composition/lifting-values-to-an-effect"> 182 <i class="fa fa-circle"></i> 183 <span>Lifting values to an effect</span> 184 </a> 185 </li> 186 <li> 187 <a href="../next/docs/composition/combining-independent-computations"> 188 <i class="fa fa-circle"></i> 189 <span>Combining independent computations</span> 190 </a> 191 </li> 192 <li> 193 <a href="../next/docs/composition/sequencing-dependent-computations"> 194 <i class="fa fa-circle"></i> 195 <span>Sequencing dependent computations</span> 196 </a> 197 </li> 198 <li> 199 <a href="../next/docs/composition/transforming-multiple-effects"> 200 <i class="fa fa-circle"></i> 201 <span>Transforming multiple effects</span> 202 </a> 203 </li> 204 </ul> 205 </li> 206 <li class="sidebar-nav-item"> 207 <a href="#"> 208 <span>Dependency management</span> 209 <i class="fa fa-angle-right"></i> 210 </a> 211 <ul> 212 <li> 213 <a href="../next/docs/dependency-management/dependency-management-overview"> 214 <i class="fa fa-circle"></i> 215 <span>Dependency management Overview</span> 216 </a> 217 </li> 218 <li> 219 <a href="../next/docs/dependency-management/partial-application"> 220 <i class="fa fa-circle"></i> 221 <span>Partial application</span> 222 </a> 223 </li> 224 <li> 225 <a href="../next/docs/dependency-management/constructor-based-dependency-injection"> 226 <i class="fa fa-circle"></i> 227 <span>Constructor-based dependency injection</span> 228 </a> 229 </li> 230 <li> 231 <a href="../next/docs/dependency-management/reader"> 232 <i class="fa fa-circle"></i> 233 <span>Reader</span> 234 </a> 235 </li> 236 <li> 237 <a href="../next/docs/dependency-management/side-effectful-dependency-management"> 238 <i class="fa fa-circle"></i> 239 <span>Side-effectful dependency management</span> 240 </a> 241 </li> 242 </ul> 243 </li> 244 <li class="sidebar-nav-item"> 245 <a href="#"> 246 <span>Patterns</span> 247 <i class="fa fa-angle-right"></i> 248 </a> 249 <ul> 250 <li> 251 <a href="../next/docs/patterns/error-handling"> 252 <i class="fa fa-circle"></i> 253 <span>Error handling</span> 254 </a> 255 </li> 256 <li> 257 <a href="../next/docs/patterns/monad-comprehensions"> 258 <i class="fa fa-circle"></i> 259 <span>Monad comprehensions</span> 260 </a> 261 </li> 262 <li> 263 <a href="../next/docs/patterns/tail-recursion"> 264 <i class="fa fa-circle"></i>
265 <span>Tail recursion</span> 266 </a> 267 </li> 268 <li> 269 <a href="../next/docs/patterns/state-based-computations"> 270 <i class="fa fa-circle"></i> 271 <span>State-based computations</span> 272 </a> 273 </li> 274 <li> 275 <a href="../next/docs/patterns/polymorphic-programs"> 276 <i class="fa fa-circle"></i> 277 <span>Polymorphic programs</span> 278 </a> 279 </li> 280 </ul> 281 </li> 282 <li class="sidebar-nav-item"> 283 <a href="#"> 284 <span>Optics</span> 285 <i class="fa fa-angle-right"></i> 286 </a> 287 <ul> 288 <li> 289 <a href="../next/docs/optics/optics-overview"> 290 <i class="fa fa-circle"></i> 291 <span>Optics Overview</span> 292 </a> 293 </li> 294 <li> 295 <a href="http://www.longislandprogrammingpros.com"> 296 <i class="fa fa-circle"></i> 297 <span>Writing your own optics</span> 298 </a> 299 </li> 300 <li> 301 <a href="../next/docs/optics/automatic-derivation"> 302 <i class="fa fa-circle"></i> 303 <span>Automatic derivation</span> 304 </a> 305 </li> 306 <li> 307 <a href="../next/docs/optics/composition"> 308 <i class="fa fa-circle"></i> 309 <span>Composition</span> 310 </a> 311 </li> 312 </ul> 313 </li> 314 <li class="sidebar-nav-item"> 315 <a href="#"> 316 <span>Effects</span> 317 <i class="fa fa-angle-right"></i> 318 </a> 319 <ul> 320 <li> 321 <a href="../next/docs/effects/effects-overview"> 322 <i class="fa fa-circle"></i> 323 <span>Effects Overview</span> 324 </a> 325 </li> 326 <li> 327 <a href="../next/docs/effects/suspending-side-effects"> 328 <i class="fa fa-circle"></i> 329 <span>Suspending side effects</span> 330 </a> 331 </li> 332 <li> 333 <a href="../next/docs/effects/manipulating-side-effects"> 334 <i class="fa fa-circle"></i> 335 <span>Manipulating side effects</span> 336 </a> 337 </li> 338 <li> 339 <a href="../next/docs/effects/handling-errors"> 340 <i class="fa fa-circle"></i> 341 <span>Handling errors</span> 342 </a> 343 </li> 344 <li> 345 <a href="../next/docs/effects/concurrency"> 346 <i class="fa fa-circle"></i> 347 <span>Concurrency</span> 348 </a> 349 </li> 350 <li> 351 <a href="../next/docs/effects/running-side-effects"> 352 <i class="fa fa-circle"></i> 353 <span>Running side effects</span> 354 </a> 355 </li> 356 <li> 357 <a href="../next/docs/effects/retrying-and-repeating-effects"> 358 <i class="fa fa-circle"></i> 359 <span>Retrying and repeating effects</span> 360 </a> 361 </li> 362 <li> 363 <a href="../next/docs/effects/handling-resources"> 364 <i class="fa fa-circle"></i> 365 <span>Handling resources</span> 366 </a> 367 </li> 368 <li> 369 <a href="../next/docs/effects/foundation-extensions"> 370 <i class="fa fa-circle"></i>
371 <span>Foundation extensions</span> 372 </a> 373 </li> 374 </ul> 375 </li> 376 <li class="sidebar-nav-item"> 377 <a href="#"> 378 <span>Testing</span> 379 <i class="fa fa-angle-right"></i> 380 </a> 381 <ul> 382 <li> 383 <a href="../next/docs/testing/testing-overview"> 384 <i class="fa fa-circle"></i> 385 <span>Testing Overview</span> 386 </a> 387 </li> 388 <li> 389 <a href="../next/docs/testing/testing-type-class-instances"> 390 <i class="fa fa-circle"></i> 391 <span>Testing type class instances</span> 392 </a> 393 </li> 394 <li> 395 <a href="../next/docs/testing/testing-side-effectful-code"> 396 <i class="fa fa-circle"></i> 397 <span>Testing side effectful code</span> 398 </a> 399 </li> 400 </ul> 401 </li> 402 <li class="sidebar-nav-item"> 403 <a href="#"> 404 <span>Integrations</span> 405 <i class="fa fa-angle-right"></i> 406 </a> 407 <ul> 408 <li> 409 <a href="../next/docs/integrations/rxswift-streams"> 410 <i class="fa fa-circle"></i> 411 <span>RxSwift streams</span> 412 </a> 413 </li> 414 </ul> 415 </li> 416 <li class="sidebar-nav-item"> 417 <a href="#"> 418 <span>Legal</span> 419 <i class="fa fa-angle-right"></i> 420 </a> 421 <ul> 422 <li> 423 <a href="../next/docs/legal/credits"> 424 <i class="fa fa-circle"></i> 425 <span>Credits</span> 426 </a> 427 </li> 428 <li> 429 <a href="../next/docs/legal/license"> 430 <i class="fa fa-circle"></i> 431 <span>License</span> 432 </a> 433 </li> 434 </ul> 435 </li> 436 </ul> 437</div> 438 <div id="doc-wrapper"> 439 <div class="doc-header"> 440 <button type="button" id="main-toggle" class="sidebar-toggle"> 441 <i class="fa fa-lg fa-bars menu-icon"></i> 442 </button> 443 </div> 444 <div class="doc-content"> 445 <h1 id="bow">Bow</h1> 446<p>Bow is a Functional Programming companion library for Swift. It provides the following utilities:</p> 447<p class="beginner">beginner</p> 448<ul> 449 <li><strong>Higher Kinded Types emulation</strong>: Swift does not have native support for Higher Kinded Types, although the Generics Manifesto states it will in the future. However, we added support to begin with as itâs needed in the rest of the library. The emulation is simple, but adds a small amount of boilerplate that we are working to automate.</li> 450 <li><strong>Function manipulation utilities</strong>: operators for composing, currying, reversing, complementing, and memoizing functions are available as part of the core module.</li> 451 <li><strong>Data types</strong>: the core module provides some useful data types like <code class="highlighter-rouge">Option</code>, <code class="highlighter-rouge">Either</code>, <code class="highlighter-rouge">Try</code> and <code class="highlighter-rouge">NonEmptyArray</code>, as well as wrappers over types in Foundation, like <code class="highlighter-rouge">ListK</code> and <code class="highlighter-rouge">SetK</code> that enable using them as Higher Kinded Types.</li> 452 <li><strong>Type classes and instances</strong>: definitions of usual type classes, like <code class="highlighter-rouge">Functor</code>, <code class="highlighter-rouge">Monad</code> and <code class="highlighter-rouge">Semigroup</code> are part of this module. Also, instances for primitive types and the provided data types are available.</li> 453</ul> 454<p class="intermediate">intermediate</p> 455<ul> 456 <li><strong>Monad transformers</strong>: work with nested effects in an easy and seamless way with types like <code class="highlighter-rouge">StateT</code> or <code class="highlighter-rouge">
456WriterT</code>.</li> 457 <li><strong>Effects</strong>: encapsulate side effects in the <code class="highlighter-rouge">IO</code> data type and manipulate it with the corresponding type classes.</li> 458 <li><strong>Optics</strong>: utilities to work with immutable data structures such as <code class="highlighter-rouge">Lenses</code> and <code class="highlighter-rouge">Prisms</code>.</li> 459 <li><strong>Integrations</strong>: Bow is compatible with <code class="highlighter-rouge">RxSwift</code>.</li> 460</ul> 461<p class="advanced">advanced</p> 462<ul> 463 <li><strong>Recursion schemes</strong>: manipulate recursive data structures with F-algebras and generic folding and unfolding functions.</li> 464 <li><strong>Free monads</strong>: describe your programs using the <code class="highlighter-rouge">Free</code> monad and create interpreters to concrete implementations.</li> 465</ul> 466 </div> 467</div> 468</div> 469<!-- Custom scripts for this template -->
470<script src="../next/js/docs.js"></script>
470 471<!-- Gitter -->
472<script> 473 ((window.gitter = {}).chat = {}).options = { 474 room: 'bowswift/bow' 475 }; 476</script>
vendor: 1 bytes, line 476
476
477<script src="../dist/sidecar.v1.js" async defer></script>
477 478</body> 479</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.