{"id":13451803,"url":"https://github.com/evilsoft/crocks","last_synced_at":"2025-05-14T16:14:17.616Z","repository":{"id":37677775,"uuid":"62473217","full_name":"evilsoft/crocks","owner":"evilsoft","description":"A collection of well known Algebraic Data Types for your utter enjoyment.","archived":false,"fork":false,"pushed_at":"2023-01-06T01:32:51.000Z","size":10925,"stargazers_count":1591,"open_issues_count":68,"forks_count":102,"subscribers_count":37,"default_branch":"master","last_synced_at":"2025-04-05T19:08:10.766Z","etag":null,"topics":["adt","composition","curry","functor","lift","monad","monoid","pair","predicate-functions","unary-functions"],"latest_commit_sha":null,"homepage":"https://crocks.dev","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evilsoft.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-02T23:13:18.000Z","updated_at":"2025-03-26T00:54:59.000Z","dependencies_parsed_at":"2023-02-05T01:31:39.786Z","dependency_job_id":null,"html_url":"https://github.com/evilsoft/crocks","commit_stats":null,"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilsoft%2Fcrocks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilsoft%2Fcrocks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilsoft%2Fcrocks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilsoft%2Fcrocks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evilsoft","download_url":"https://codeload.github.com/evilsoft/crocks/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248631670,"owners_count":21136554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adt","composition","curry","functor","lift","monad","monoid","pair","predicate-functions","unary-functions"],"created_at":"2024-07-31T07:01:03.108Z","updated_at":"2025-04-12T20:40:24.768Z","avatar_url":"https://github.com/evilsoft.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Javascript","Libraries"],"sub_categories":["Algebraic Data Types","[Javascript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)"],"readme":"[![Build Status](https://travis-ci.org/evilsoft/crocks.svg?branch=master)](https://travis-ci.org/evilsoft/crocks) [![Coverage Status](https://coveralls.io/repos/github/evilsoft/crocks/badge.svg?branch=master)](https://coveralls.io/github/evilsoft/crocks?branch=master)\n[![Join the chat at https://gitter.im/crocksjs/crocks](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/crocksjs/crocks?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n[![NPM version](https://badge.fury.io/js/crocks.svg)](https://www.npmjs.com/package/crocks)\n\n`crocks` is a collection of popular *Algebraic Data Types (ADTs)* that are all\nthe rage in functional programming. You have heard of things \nlike `Maybe` and `Either` and heck maybe even `IO`, that is what these are. The\nmain goal of `crocks` is to curate and provide not only a common interface\nbetween each type (where possible of course), but also provide all of the helper\nfunctions needed to hit the ground running.\n\n## Table of Contents\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Entire `crocks` library (CommonJS)](#entire-crocks-library-commonjs)\n  - [Entire `crocks` library (JS Modules)](#entire-crocks-library-js-modules)\n  - [Single entities (CommonJS)](#single-entities-commonjs)\n  - [Single entities (JS Modules)](#single-entities-js-modules)\n  - [Example](#example)\n- [Documentation](#documentation)\n- [What is Included?](#what-is-included)\n- [Contributors](#contributors)\n  - [Course/Videos](#coursevideos)\n    - [Video evilsoft](#video-evilsoft)\n    - [Video avanslaars](#video-avanslaars)\n  - [Tutorials](#tutorials)\n    - [Tutorial rpearce](#tutorial-rpearce)\n  - [Examples](#examples)\n    - [Example dbagia](#example-dbagia)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Installation\n`crocks` is available from `npm` and is just a shell command away. All you need\nto do is run the following to save it as a dependency in your current project\nfolder:\n\n```\n$ npm install crocks -S\n```\n\n## Usage\n\nThere are many options to use `crocks` to suit the needs of your, projects. When\nused on the backend or in an environment where size is not a big concern, the\nentire lib can be brought in and the various elements can be either be plucked\noff of or referenced by the namespace.\n\nFor those cases where size matters, like in the case of frontend bundle\nbuilding, the individual entities can be brought in. This will ensure that\nyour finished bundles include only what is needed for your application/program.\n\nFor using the latter case, refer to the desired function's documentation to\nfind the path in which it resides.\n\n### Entire `crocks` library (CommonJS)\n\n```javascript\n// namespace entire suite to crocks variable\nconst crocks = require('crocks')\n\n// pluck anything that does not require name-spacing\nconst { safe, isNumber } = crocks\n\n// still requires entire object, but removes name-spacing\nconst { and, liftA2 } = require('crocks')\n```\n\n### Entire `crocks` library (JS Modules)\n\n```javascript\n// namespace entire suite to crocks variable\nimport crocks from 'crocks'\n\n// still imports entire object, but removes name-spacing\nimport { and, liftA2 }  from 'crocks'\n\n// pluck anything that does not require name-spacing\nconst { safe, isNumber } = crocks\n```\n\n### Single entities (CommonJS)\n\n```javascript\n// require in each entity directly\nconst and = require('crocks/logic/and')\nconst curry = require('crocks/helpers/curry')\nconst isNumber = require('crocks/predicates/isNumber')\nconst liftA2 = require('crocks/helpers/liftA2')\nconst safe = require('crocks/Maybe/safe')\n```\n\n### Single entities (JS Modules)\n\n```javascript\n// import in each entity directly\nimport and from 'crocks/logic/and'\nimport curry from 'crocks/helpers/curry'\nimport isNumber from 'crocks/predicates/isNumber'\nimport liftA2 from 'crocks/helpers/liftA2'\nimport safe from 'crocks/Maybe/safe'\n```\n\n### Example\n\nDocumentation references: [and][and-logic-crocks],\n[curry][curry-helpers-crocks],\n[predicates (isNumber)][predicate-docs],\n[liftA2][lifta2-helpers-crocks],\n[safe][safe-maybe-crocks].\n\n```javascript\n// divide :: Number -\u003e Number -\u003e Number\nconst divide = x =\u003e y =\u003e\n  x / y\n\n// safeNumber :: a -\u003e Maybe Number\nconst safeNumber =\n  safe(isNumber)\n\n// notZero :: a -\u003e Maybe Number\nconst notZero = safe(\n  and(isNumber, x =\u003e x !== 0)\n)\n\n// safeDivide:: a -\u003e a -\u003e Maybe Number\nconst safeDivide = curry(\n  (x, y) =\u003e liftA2(divide, safeNumber(x), notZero(y))\n)\n\nsafeDivide(20)(0)\n//=\u003e Nothing\n\nsafeDivide(20, 0)\n//=\u003e Nothing\n\nsafeDivide(20, 5)\n//=\u003e Just 4\n\nsafeDivide('number', 5)\n//=\u003e Nothing\n```\n\n## Documentation\n\n* [API Documentation][docs]\n* [Contributing Information][contrib]\n\n## What is Included?\nThere are (8) classifications of \"things\" included in this library:\n\n* [Crocks][crock-docs]: These are the ADTs that this library is centered around.\nThey are all `Functor` based Data Types that provide different computational\ncontexts for working in a more declarative, functional flow. For the most part,\na majority of the other bits in `crocks` exist to serve these ADTs.\n\n* [Monoids][monoid-docs]: These helpful ADTs are in a class of their own, not\nreally `Functor`s in their own right (although some can be), they are still very\nuseful in our everyday programming needs. Ever need to sum a list of numbers or\nmix a mess of objects together? This is were you will find the ADTs you need to\ndo that.\n\n* [Combinators][combinator-docs]: A collection of functions that are used for\nworking with other functions. These do things like compose (2) functions\ntogether, or flip arguments on a function. They typically either take a\nfunction, return a function or a bit a both. These are considered the glue that\nholds the mighty house of `crocks` together and a valuable aid in writing\nreusable code.\n\n* [Helper Functions][helper-docs]: All other support functions that are\neither convenient versions of combinators or not even combinators at all cover\nthis group.\n\n* [Logic Functions][logic-docs]: A helpful collection of logic based\nfunctions. All of these functions work with either predicate functions or\ninstances of `Pred` and let you combine them in some very interesting ways.\n\n* [Predicate Functions][predicate-docs]: A helpful collection of predicate\nfunctions to get you started.\n\n* [Point-free Functions][pointfree-docs]: Wanna use these ADTs in a way\nthat you never have to reference the actual data being worked on? Well here is\nwhere you will find all of these functions to do that. For every algebra\navailable on both the `Crocks` and `Monoids` there is a function here.\n\n* [Transformation Functions][transformation-docs]: All the functions found\nhere are used to transform from one type to another, naturally. These come are\nhandy in situations where you have functions that return one type (like\nan `Either`), but are working in a context of another (say `Maybe`). You would\nlike to compose these, but in doing so will result in a nesting that you will\nneed to account for for the rest of your flow.\n\n## Contributors\n\nThanks goes to these wonderful people ([emoji key][emojis]):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/evilsoft\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/3665793?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIan Hofmann-Hicks\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=evilsoft\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=evilsoft\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#video-evilsoft\" title=\"Videos\"\u003e📹\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/rstegg\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/19234385?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRyan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=rstegg\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/issues?q=author%3Arstegg\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/pulls?q=is%3Apr+reviewed-by%3Arstegg\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://vanslaars.io\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1271181?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndrew Van Slaars\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=avanslaars\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#video-avanslaars\" title=\"Videos\"\u003e📹\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/HenriqueLimas\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/2222191?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHenrique Limas\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=HenriqueLimas\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=HenriqueLimas\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/pulls?q=is%3Apr+reviewed-by%3AHenriqueLimas\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://robertwpearce.com\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/592876?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRobert Pearce\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/issues?q=author%3Arpearce\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=rpearce\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/pulls?q=is%3Apr+reviewed-by%3Arpearce\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#tutorial-rpearce\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=rpearce\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/flintinatux\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/888052?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eScott McCormack\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/issues?q=author%3Aflintinatux\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.fdaoud.com\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/1706600?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFred Daoud\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/pulls?q=is%3Apr+reviewed-by%3Afoxdonut\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/karthikiyengar\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/8260207?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKarthik Iyengar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/pulls?q=is%3Apr+reviewed-by%3Akarthikiyengar\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=karthikiyengar\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=karthikiyengar\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/jonwhelan\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/7376957?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJon Whelan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/issues?q=author%3Ajonwhelan\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=jonwhelan\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://bennypowers.com\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1466420?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBenny Powers\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=bennypowers\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=bennypowers\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/pulls?q=is%3Apr+reviewed-by%3Abennypowers\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/dalefrancis88\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1909325?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDale Francis\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=dalefrancis88\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/pulls?q=is%3Apr+reviewed-by%3Adalefrancis88\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/premithk\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/7926867?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePremith\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=premithk\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/dbagia\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/6302673?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDipen Bagia\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#example-dbagia\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/ximenean\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/5243925?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndrew Jones\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=ximenean\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/wayneseymour\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/4858051?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eW. K. Seymour III\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=wayneseymour\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://youtube.com/euprogramadoroficial\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/11702749?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEliseu Benedito Codinhoto\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=zeucxb\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/NiallArkEnergy\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/12712867?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNiallArkEnergy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=NiallArkEnergy\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=NiallArkEnergy\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/vidyu\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/3265934?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003evidyu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=vidyu\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://michael-wolfenden.github.io\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/780521?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichael Wolfenden\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=michael-wolfenden\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/JohanCodinha\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/14071356?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJohan Codinha\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/issues?q=author%3AJohanCodinha\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.mattross.io\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/450220?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMatt Ross\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=amsross\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://jazzy.codes\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/4014487?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJasmina Jacquelina\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=jasminabasurita\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=jasminabasurita\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/faliah\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/5593080?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDenis Zolkin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=faliah\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.cnblogs.com/Answer1215/\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/11929006?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eZhentian Wan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=zhentian-wan\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/RichardForrester\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/12902182?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRichardForrester\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=RichardForrester\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=RichardForrester\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/evilsoft/crocks/commits?author=RichardForrester\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://furkantunali.com\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/68406?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFurkan Tunalı\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=JacopKane\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#example-JacopKane\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/sunwukonga\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/12194690?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePaul Desmond Parker\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=sunwukonga\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/area73\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/2030605?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRodrigo Erades\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=area73\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://twitter.com/jamiedixon\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/1519443?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJamie Dixon\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=JamieDixon\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://sharepointfordeveloper.blogspot.com\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/896016?v=4\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBasant Pandey\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/evilsoft/crocks/commits?author=BasantPandey\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-enable --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n### Course/Videos\n\n#### Video evilsoft\n* [State Monad In JavaScript (egghead.io)](https://egghead.io/courses/state-monad-in-javascript)\n* [Working With ADTs (YouTube)](https://www.youtube.com/playlist?list=PLjvgv-FpMo7XRVFZjZsWXJ5nVmRJ5a5Hv)\n* [Functional JS (YouTube)](https://www.youtube.com/playlist?list=PLjvgv-FpMo7XvlfO8YKiz4_onf8WonhiA)\n\n#### Video avanslaars\n* [Safer JavaScript with the Maybe Type](https://egghead.io/courses/safer-javascript-with-the-maybe-type)\n\n### Tutorials\n#### Tutorial rpearce\n* [Ramda Chops: Function Currying](https://robertwpearce.com/ramda-chops-function-currying.html)\n* [JavaScript: Writing a Functional Programming-Style map Function](https://robertwpearce.com/javascript-writing-a-functional-programming-style-map-function.html)\n\n### Examples\n#### Example dbagia\n* [React Declarative Form Generator](https://github.com/dbagia/declarative-form-generator)\n\n[docs]: https://evilsoft.github.io/crocks/docs/\n[contrib]: https://github.com/evilsoft/crocks/blob/master/CONTRIBUTORS.md\n[crock-docs]: https://evilsoft.github.io/crocks/docs/crocks/\n[monoid-docs]: https://evilsoft.github.io/crocks/docs/monoids/\n[combinator-docs]: https://evilsoft.github.io/crocks/docs/functions/#combinators\n[helper-docs]: https://evilsoft.github.io/crocks/docs/functions/#helpers\n[logic-docs]: https://evilsoft.github.io/crocks/docs/functions/#logic\n[predicate-docs]: https://evilsoft.github.io/crocks/docs/functions/predicate-functions.html\n[pointfree-docs]: https://evilsoft.github.io/crocks/docs/functions/pointfree-functions.html\n[transformation-docs]: https://evilsoft.github.io/crocks/docs/functions/transformation-functions.html\n[emojis]:https://github.com/kentcdodds/all-contributors#emoji-key\n[and-logic-crocks]: https://crocks.dev/docs/functions/logic-functions.html#and\n[curry-helpers-crocks]: https://crocks.dev/docs/functions/helpers.html#curry\n[lifta2-helpers-crocks]: https://crocks.dev/docs/functions/helpers.html#lifta2\n[safe-maybe-crocks]: https://crocks.dev/docs/crocks/Maybe.html#safe\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevilsoft%2Fcrocks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevilsoft%2Fcrocks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevilsoft%2Fcrocks/lists"}