{"_id":"@aprillion/algebraic-effects","_rev":"1-8d909606eb4b29852f31fc9f43a396ca","name":"@aprillion/algebraic-effects","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@aprillion/algebraic-effects","version":"0.1.0","description":"JavaScript test implementation of Algebraic Effects as outlined on https://overreacted.io/algebraic-effects-for-the-rest-of-us/","main":"index.js","scripts":{"test":"jest --watchAll"},"repository":{"type":"git","url":"git+https://github.com/Aprillion/algebraic-effects.git"},"author":{"name":"peter.hozak@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/Aprillion/algebraic-effects/issues"},"homepage":"https://github.com/Aprillion/algebraic-effects#readme","devDependencies":{"jest":"^24.8.0","prettier":"^1.18.2"},"gitHead":"df329b88ce03aecfd5855bb181a63241c1cb110a","_id":"@aprillion/algebraic-effects@0.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"aprillion","email":"peter.hozak@gmail.com"},"dist":{"integrity":"sha512-4LYKtRWqaYWKcZt261iMbhDrdiZdcGy20z1xQh3vRnX1cuoL3rj+eGV99R2nz942ca0jRulbkAobp7YvwA+L/w==","shasum":"de81307dfc3e9e5d0c257e39927bd344ecc7ff22","tarball":"https://registry.npmjs.org/@aprillion/algebraic-effects/-/algebraic-effects-0.1.0.tgz","fileCount":6,"unpackedSize":5636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdNLXPCRA9TVsSAnZWagAA2A0QAKQyAnb+4isl2HRKcoAm\nB/BBdr9MdkZm46kXqrD08gbYqGmg35K72tqMaabk4vQ1RgmqPw+fRof3nviS\nLPMVr9X6TKc3bK2Jl1qfRyrWRInalJNjqnam3ZUQKsE1iXpaG6HBeN7Ql7Gz\nTFLGwiNmGEoinASJ2b1/8OqFB76eLFFBpY/ikqTOc3z48oAoQaymKyJaVqI+\nHkeWVL9vaxafUq5PwTZbRmjam+DNGqtz5MPldSMEu6VkE/VfmU2Z6xZq+yIX\nE1dyo/QgPkCFWJSvMzikooTsUf1M1p8Ecok6phC2nf4AARLGxQYNF6E9ZhBR\nkLZ1QqKqzlX7fVd0HBM96B048+hIaXc4xcHoZP6ieapp4OS9xqeEaJ2c0ggc\ndmkRAkYjaW0f+XN3xrvU1jInYLTLEhtQ4W0rpihw10ytrfNik6jfbsZWEoXS\nXCkL2s7ahk7gU/E8tokfbeaVoHoyV8c/Ti2Hx5B80VhMaqJplJlWNRBRjWZZ\n+TF16yjDagS5SfZnKUii9PNQv84jAE17Qo1a5qVsPCqS+n/hcQo+yk0fvR6E\nz7oEd1UwV2q10lJUDJ9gSIayL13N5Hodmn6ge4RD6GaH9LXB48BkmY1wF60C\nWhPWvt9c7hBtUg2Yt/U9/P0DMXvQyhIhFMdpsXc1+tCf2azQbc4GnwikByWu\nsfw8\r\n=qv62\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBOKp7IlHRYTEWwUzEf/4sIkleEu/jJxCOtE1562En8yAiEAm9pr27dx7NaOH/INiNkprmFlTpXIK95A+Q37xhAHR6Y="}]},"maintainers":[{"name":"aprillion","email":"peter.hozak@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/algebraic-effects_0.1.0_1563735502551_0.3310472439375647"},"_hasShrinkwrap":false}},"time":{"created":"2019-07-21T18:58:22.344Z","0.1.0":"2019-07-21T18:58:22.680Z","modified":"2022-04-04T15:08:22.079Z"},"maintainers":[{"name":"aprillion","email":"peter.hozak@gmail.com"}],"description":"JavaScript test implementation of Algebraic Effects as outlined on https://overreacted.io/algebraic-effects-for-the-rest-of-us/","homepage":"https://github.com/Aprillion/algebraic-effects#readme","repository":{"type":"git","url":"git+https://github.com/Aprillion/algebraic-effects.git"},"author":{"name":"peter.hozak@gmail.com"},"bugs":{"url":"https://github.com/Aprillion/algebraic-effects/issues"},"license":"MIT","readme":"# JavaScript Algebraic Effects\n\nTest implementation of concepts from https://overreacted.io/algebraic-effects-for-the-rest-of-us/ using only the language features available in 2019.\n\n> NOT intended for production code, just exploration of the concepts!\n\n## Usage\n\n```bash\nnpm i @aprillion/algebraic-effects\n```\n\n```js\nimport {perform, withPerform, resumeWith} from 'algebraic-effects'\n\nfunction getName(user) {\n  let name = user.name\n  if (name === null) {\n    name = perform('ask_name')\n  }\n  return name\n}\n\nfunction makeFriends(user1, user2) {\n  user1.friendNames.push(getName(user2))\n  user2.friendNames.push(getName(user1))\n}\n\nconst arya = {name: null, friendNames: []}\nconst gendry = {name: 'Gendry', friendNames: []}\nwithPerform(\n  () => {\n    makeFriends(arya, gendry)\n  },\n  effect => {\n    if (effect === 'ask_name') {\n      resumeWith('Arya Stark')\n    }\n  },\n)\n// expect(arya.friendNames).toEqual(['Gendry'])\n// expect(gendry.friendNames).toEqual(['Arya Stark'])\n```\n\nSee [index.test.js](./index.test.js) for more examples.\n\n## Contribution\n\n[GitHub Issues](../../issues) are welcome, but no promisses about response time.\n","readmeFilename":"README.md"}