{"id":16659346,"url":"https://github.com/bhb/effective-clj","last_synced_at":"2026-04-30T05:33:42.849Z","repository":{"id":66310355,"uuid":"163621067","full_name":"bhb/effective-clj","owner":"bhb","description":"Notes and code for talk","archived":false,"fork":false,"pushed_at":"2019-01-21T04:10:43.000Z","size":66,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-02-20T13:58:51.560Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bhb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-30T22:12:16.000Z","updated_at":"2019-07-17T18:11:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"71ed0f01-8115-475b-bf44-2e02e57c6ade","html_url":"https://github.com/bhb/effective-clj","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bhb/effective-clj","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhb%2Feffective-clj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhb%2Feffective-clj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhb%2Feffective-clj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhb%2Feffective-clj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bhb","download_url":"https://codeload.github.com/bhb/effective-clj/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhb%2Feffective-clj/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32456165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-10-12T10:24:45.709Z","updated_at":"2026-04-30T05:33:42.832Z","avatar_url":"https://github.com/bhb.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Effect-ive Clojure\n\nPure functions are the building blocks of idiomatic Clojure(Script) programs, since we can easily understand and test them. By definition, these functions should not have any effects i.e. should not change the outside world. However, our programs are only useful if they produce effects like sending emails, displaying information, or saving information to databases.\n\nThis talk explores techniques for writing effects in ClojureScript. We’ll look at how to separate effects from pure functions, discuss the tradeoffs of tools like callbacks, Promises, and core.async, and explore some strategies for simplifying sequences of effects.\n\n[Slides](https://goo.gl/YNRQkz)\n\n## Usage\n\n### Client REPL\n\n#### Terminal\n\n`clj -A:client:rebel -m figwheel.main`\n\n#### inf-clojure\n\n1. Terminal: `clj -A:client -J-Dclojure.server.repl=\"{:port 5555 :accept clojure.core.server/repl}\"`\n1. Emacs: `M-x inf-clojure-connect`\n1. Choose localhost and 5555\n1. In Emacs REPL: `(require '[figwheel.main.api])`\n1. In Emacs REPL: `(figwheel.main.api/start \"dev\")`\n1. In Emacs buffer (unless you already have `inf-clojure` set to autoload): `M-x inf-clojure-minor-mode`\n\n### Server\n\n`clj -A:server`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhb%2Feffective-clj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbhb%2Feffective-clj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhb%2Feffective-clj/lists"}