[HN Gopher] Shh: Simple Shell Scripting from Haskell
       ___________________________________________________________________
        
       Shh: Simple Shell Scripting from Haskell
        
       Author : subset
       Score  : 167 points
       Date   : 2023-11-25 12:22 UTC (10 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | cole-k wrote:
       | Those of you who use (or used) this as your shell: care to share
       | your experience?
       | 
       | It seems a lot less full-featured than https://xon.sh/, but maybe
       | you don't need a lot of bells and whistles for regular usage. I
       | mostly run build, execute, and install commands.
       | 
       | I'm somewhat enticed at the possibility of being able to wrap
       | common executables into forms that are typed (like nushell or
       | elvish) and manipulate them in a way that leverages the type
       | checker.
        
         | themk wrote:
         | Author here. I rarely use it as a shell personally, though it
         | does work, and sometimes I drop into it for the odd task. It's
         | primarily designed to replace overgrown bash scripts.
        
       | fuzztester wrote:
       | Related: has anyone tried scheme shell (scsh) and what is your
       | experiences with it?
       | 
       | https://en.m.wikipedia.org/wiki/Scsh
        
         | loevborg wrote:
         | Last time I tried I couldn't get it to compile
         | 
         | These days https://babashka.org/ is a much better option. It's
         | powerful, fast, modern, works everywhere and has effortless
         | multitasking.
        
         | elviejo wrote:
         | There is also Rash: Racket Shell that looks super interesting.
         | 
         | https://youtu.be/yXcwK3XNU3Y?si=XuABEBZReyfhraAh
         | 
         | Haven't tried it though.
        
           | velcrovan wrote:
           | It is interesting, but not something you'd really want to
           | rely on. (see the issues, comments and commit history:
           | https://github.com/willghatch/racket-rash)
           | 
           | This project could really benefit from picking up a couple of
           | steady contributors. It looks like the author is a new dad,
           | and his commit history looks about like what mine did at that
           | stage.
        
           | forgotpwd16 wrote:
           | Interestingly Rash is also suitable as a user-oriented shell
           | (like bash) rather be reserved for scripting (like scsh).
        
         | chubot wrote:
         | FWIW there is a big list of similar libraries / internal DSLs
         | in nearly all Lisps, and nearly all statically typed functional
         | languages here:
         | 
         | https://github.com/oilshell/oil/wiki/Internal-DSLs-for-Shell
         | 
         | e.g. points to another Haskell project, which may be old -
         | https://github.com/jgoerzen/hsh/wiki
         | 
         | Which is related to the list of free-standing shells:
         | 
         | https://github.com/oilshell/oil/wiki/Alternative-Shells
        
         | agumonkey wrote:
         | Not this one, but for a while I tried getting
         | 
         | https://wryun.github.io/es-shell/
         | 
         | to run (a functionalish shell)
        
         | nemoniac wrote:
         | IMHO it's worth spending some time getting acquainted with it.
         | It's very clearly thought out conceptually with good separation
         | of concerns. I learned a lot about Scheme and a lot about Unix
         | from using it.
        
         | fuzztester wrote:
         | Thanks for the answers, guys.
        
         | adastra22 wrote:
         | "Shell scripts" is kinda the domain of newLISP, which I've used
         | before and like.
        
       | ekiauhce wrote:
       | You can't really move away from bash, unless there would be
       | alternative as widely available on different Unix systems as bash
       | is.
       | 
       | Yes, you came up with a nice syntax for your Haskell scripts, but
       | what it cost to install all required dependencies on, for
       | example, newly created Ubuntu server?
        
         | pbiggar wrote:
         | We're trying to do a similar thing with darklang right now:
         | providing a single binary with a built-in package manager. The
         | idea being making it easy to write readable "bash" scripts
         | (including writing them with AI), but with just one dependency
         | - the darklang binary itself.
        
         | themk wrote:
         | Yep, this is mainly used for turning those bash scripts that
         | you let get too large into a real program. You port your
         | script, basically line for line, into this, and then start
         | chipping away at it until you have something less scary.
        
         | forgotpwd16 wrote:
         | Too bad Hugs98 (installation is few MBs) is no longer updated
         | leaving only GHC (GB+).
        
           | maleldil wrote:
           | You don't need the compiler to run the program in production.
           | You only need the binary. I'd argue that a heavy toolchain in
           | the dev machine isn't a big deal.
        
             | IshKebab wrote:
             | Bash scripts tend to be used in situations where you want
             | to edit them and not have to deal with a recompilation
             | step, let alone a multi-GB compiler install. That seems
             | like a deal-breaker to me.
             | 
             | The best alternative I've found so far is Deno. It natively
             | supports single file scripts _with third party
             | dependencies_ (this is a big issue with replacing Bash with
             | Python). It uses an existing popular language (so now
             | "learn our weird language" problem). Installation is very
             | easy.
             | 
             | The only real downside I've found is this stupid bug that
             | they refused to fix:
             | 
             | https://github.com/denoland/deno/issues/16466
        
         | ReleaseCandidat wrote:
         | Yes, but Shh works on Windows. And on OS X you need to install
         | about the same things if you want to have a recent Bash
         | > /bin/bash --version         GNU bash, version
         | 3.2.57(1)-release (arm64-apple-darwin23)         Copyright (C)
         | 2007 Free Software Foundation, Inc.
        
         | keybored wrote:
         | You're not always working in crummy environments. Sometimes you
         | can have nice things (if you think this is nice).
         | 
         | I don't get the impression that this is supposed to be the
         | final solution to Bash.
        
         | marcosdumay wrote:
         | Why do you want to develop Haskell programs in a newly created
         | Ubuntu server? Or do you want to compile it down at the
         | deployment target?
        
         | norir wrote:
         | > You can't really move away from bash, unless there would be
         | alternative as widely available on different Unix systems as
         | bash is.
         | 
         | Lua can be built from source in a few seconds on just about any
         | system and can be used pretty easily as a bash replacement. You
         | can even bundle the lua script in a bash script that
         | idempotently installs lua and then calls the lua script
         | embedded in heredoc.
        
         | tikhonj wrote:
         | It's pretty easy if you use NixOS :)
         | 
         | That's been one of the somewhat unexpected benefits for me with
         | NixOS: it's so easy to pull in tools and libraries that I don't
         | have to worry about using less popular options.
        
       | themk wrote:
       | Author here.
       | 
       | My main use for this is incremental migration away from bash. I'm
       | not saying this is the best way to do scripts, but it's a pretty
       | great stepping stone. Just following the cargo culting guide [0]
       | can already uplift a bash script without changing the logic too
       | much. From there you can start adding structure.
       | 
       | My secondary use case is little scripts in NixOS/nixpkgs. There
       | are some helpers in there that make it quite convenient.
       | 
       | [0] https://github.com/luke-
       | clifton/shh/blob/master/docs/porting...
        
       | sshine wrote:
       | shh is a really cool package, and so is turtle and shelly:
       | 
       | https://hackage.haskell.org/package/turtle/docs/Turtle-Tutor...
       | 
       | https://hackage.haskell.org/package/shelly
       | 
       | shh's "Alternatives" section summarises nicely some of the
       | differences between these:
       | 
       | https://github.com/luke-clifton/shh#alternatives
       | 
       | shh has a neat [fmt| ... |] macro that gets you around escaping
       | strings.
       | 
       | shh generally has more Template Haskell support; you may or may
       | not like this.
       | 
       | I am personally leaning towards shh because of its "native pipe
       | style".
        
       | ben0x539 wrote:
       | This seems fun! Far too few people who are all "your bash scripts
       | shouldn't be 300 lines and have complex logic!" address why
       | people reach for bash scripts in the first place, so kudos for
       | that.
        
       | williamcotton wrote:
       | Huh, I was just tinkering with the same sort of thing with the
       | same motivations but with F#:
       | 
       | https://github.com/williamcotton/fs_playground/blob/main/Scr...
       | 
       | Thanks for this, I'm going to borrow a lot of your concepts,
       | especially the added infix operators, those are slick!
        
       ___________________________________________________________________
       (page generated 2023-11-25 23:00 UTC)