{"id":13686972,"url":"https://github.com/ners/dosh","last_synced_at":"2025-09-21T01:55:33.354Z","repository":{"id":104276421,"uuid":"595281476","full_name":"ners/dosh","owner":"ners","description":"📺 The power of Haskell in your terminal!","archived":false,"fork":false,"pushed_at":"2025-05-20T17:37:56.000Z","size":333,"stargazers_count":43,"open_issues_count":3,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-07-05T04:14:43.749Z","etag":null,"topics":["frp","haskell","shell","terminal"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ners.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,"zenodo":null}},"created_at":"2023-01-30T19:09:27.000Z","updated_at":"2025-06-04T21:35:22.000Z","dependencies_parsed_at":"2024-01-14T16:09:14.093Z","dependency_job_id":"f26a9fdd-0d75-4b53-bd5c-4e5850243315","html_url":"https://github.com/ners/dosh","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ners/dosh","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ners%2Fdosh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ners%2Fdosh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ners%2Fdosh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ners%2Fdosh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ners","download_url":"https://codeload.github.com/ners/dosh/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ners%2Fdosh/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276183771,"owners_count":25599223,"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","status":"online","status_checked_at":"2025-09-20T02:00:10.207Z","response_time":63,"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":["frp","haskell","shell","terminal"],"created_at":"2024-08-02T15:00:45.187Z","updated_at":"2025-09-21T01:55:33.338Z","avatar_url":"https://github.com/ners.png","language":"Haskell","funding_links":[],"categories":["Haskell"],"sub_categories":[],"readme":"\u003cimg align=\"left\" width=\"80\" height=\"80\" src=\"assets/dosh-minimal.svg\" alt=\"dosh logo\"\u003e\n\n# dosh\n\nThe power of ~~capitalism~~ Haskell in your terminal!\n\n## What have we got here?\n\n`dosh` is a Haskell Read-Eval-Print Loop, or REPL for short.\nWhile other REPLs for Haskell exist, this one aims to be good enough to replace Bash as a daily driver.\n\nWe offer:\n- syntax highlighting\n- advanced history interaction\n- LSP-powered autocompletion and error detection\n\n## Really? *Haskell* as a daily driver?\n\nWhy not? Haskell is an advanced functional programming language with an excellent blend of power and elegance that scales well as commands grow nontrivial.\n\n\u003e This is the Unix philosophy: Write programs that do one thing and do it well. Write\n\u003e programs to work together. Write programs to handle text streams, because that is a\n\u003e universal interface.\n\n— \u003ccite\u003eDoug McIlroy\u003c/cite\u003e\n\nAside from executing programs, an essential operation of the shell is to manipulate text streams that pass between programs.\nMany programs output structured data, which Bash is [notoriously bad at handling](https://stackoverflow.com/a/45201229).\n\nThere are many alternatives to Bash, but they are all fundamentally boring shells. They tend to invent new domain specific languages which ultimately offer no real value as a programming language.\n\nInstead of inventing a new shell language that can do slighty more than Bash, why not go the other way around and make an existing language usable as a shell?\nAnd what language is more suitable than one that was quite literally invented as a testbed for novel uses such as this?\n\n## Why is it named `dosh`?\n\nBecause our REPL has special handling of Haskell's [`do` notation](https://en.wikibooks.org/wiki/Haskell/do_notation).\n\nIn Haskell, the keyword `do` introduces a block of commands that evaluate sequentially and can depend on each other.\nWhen the user enters a `do` block in `dosh`, the prompt changes to `do$`, which is also where the logo comes from.\n\nI've also been advised to avoid overt references to Haskell in the name (e.g. `hashell`, `shellmonad`), as those might spook people.\n\n## Prior art\n\nThis is not a novel idea, as evidenced by the abundance of Haskell libaries that provide shell primitives.\nThe only novelty of this project is a snazzy REPL around them.\n\n- [turtle: Shell programming, Haskell-style](https://hackage.haskell.org/package/turtle)\n- [shh: Simple shell scripting from Haskell](https://hackage.haskell.org/package/shh)\n- [shelly: shell-like (systems) programming in Haskell](https://hackage.haskell.org/package/shelly)\n- [ptGHCi](https://github.com/litxio/ptghci) is a high-powered REPL for Haskell, inspired by IPython\n- [Using Haskell as my shell](https://las.rs/blog/haskell-as-shell.html) (2021) by Las Safin\n- [Use Haskell for shell scripting](https://www.haskellforall.com/2015/01/use-haskell-for-shell-scripting.html) (2015) by Gabriella Gonzalez\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fners%2Fdosh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fners%2Fdosh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fners%2Fdosh/lists"}