Chris Penner

@chrispenner.ca

FP and Programming languages nerd Building the Unison Language & Unison Share 📍Victoria BC 🇨🇦 https://chrispenner.ca

No other language lets me write straight-line code like this. The `prompt` line saves saves the current continuation in a database, then sends a prompt to the user's browser to select a slot. When selected, `prompt` returns the in-memory @unison-lang.org object which corresponds to the chosen slot.

timeslotOptions : [calendly.TimeSlot]
timeslotOptions = calendly.listEventTimeslots calendlyToken startTime endTime
form = timeslotOptions
        |> timeSlotsForm
          (ts ->
            ( eventName ts
            , calendly.TimeSlot.startTime ts
            , duration ts
            ))
chosenSlot : calendly.TimeSlot
chosenSlot = prompt timeslotsForm

Happy to announce Unison Computing is branching out into consulting! iIf you'd like a hand with your project you'd be hard-pressed to find a better team to help, drop us a line 😎

Unison@unison-lang.org · 6mo ago

We have a consulting group, now open to work in a variety of languages, including Scala, Haskell, Rust, Elm, and of course Unison. More details here: www.unison-lang.org/blog/consult... Please boost to help get the word out. And we'd love to hear from you if you're interested in working with us!

📰 UCM 1.1.0 is out! * `dependents` can search by variant, not just type or ability name * New built-ins for Argon2id hashing * VS Code actions: Edit Definition & Open on Share * MCP tool: `share-project-info` * Faster bytes ops & improved run command

Release release/1.1.0 · unisonweb/unison

What's Changed Features: The dependents command now work on constructors and ability requests. (#6115) Support for "Edit Definition" and "Open on Share" in the Unison Language VS Code extension v1...

github.com

I made this tool for managing workshop sessions in tmux and I've used it *hundreds of times* per day every day for 6 years now without any hiccups; if you're looking for a good way to manage your terminal sessions maybe this is it. github.com/ChrisPenner/...

GitHub - ChrisPenner/session-sauce: Shell plugin for managing tmux sessions

Shell plugin for managing tmux sessions. Contribute to ChrisPenner/session-sauce development by creating an account on GitHub.

github.com

It's absolutely bonkers how much of modern society is still dependent on staying on hold for 2 hours on an unreliable connection when at any moment your thumb could slip or you could drop the call and there's just no way to get that call back except to wait another 2 hours 😑 #WestJet

In any active software project new bugs are always being introduced. Bugs that are important or easy to fix are typically prioritized. This means that as the project ages, the pool of bugs inevitably becomes a majority of the 'difficult to fix' or 'low-priority' variety 😢

Want to try a radically innovative programming language? Unison is ready! Unison is approachable, user-friendly, and has a great community of friendly folks :) On top of that it has mind-bending features like serializable function closures and built-in distributed programming tools!

Unison@unison-lang.org · 8mo ago

🎉 Unison 1.0 has landed! After years of engineering, design, and community collaboration, we’re excited to announce this milestone! Spread the word!

I'd really like to speak with whoever thought it was a good idea for the public and private JWK's to be represented by the same type, have the same name, with just a few missing parameters... Ah yes, the presence or absence of this "d" parameter could tank my entire company... seems safe to me :|

I've spent hours over the last months writing a post about how mutexes suck and everyone should use STM instead; but have come to the realization that even STM is more complex than necessary. What's your decision-making process when building a concurrent and/or parallel system? See mine below 👇

IMO we shouldn't be trying so hard to solve "the expression problem"; We should make it easy to update existing functions when types change, but it shouldn't always "silently work" with the new type; oftentimes existing functionality needs a human to look over it when there are changes!

What do folks out there do for error handling in concurrent tasks in #Haskell? For now I've settled on having an error `TMVar`, then use a `ki` structured concurrency scope which forks all my jobs and ends in an `(Right <$> awaitAll) <|> (Left <$> readTMVar errVar)`