Skip to content

Instantly share code, notes, and snippets.

View YearInReview.md

Unison 2021 year in review

2021 was a big year for Unison. We released a new alpha version roughly every other month, and each release came with some serious improvements. In total, we merged more than 600 pull requests, 48 of which were from the open-source community.

Here are some of the highlights.

A beautiful GUI for browsing the Unison codebase

Since a Unison codebase is not stored in text files, it's been a sticking point for developers that they haven't been able to easily browse their code and post it online for others to see. So this summer we rolled out a new user interface for browsing the Unison codebase through a web browser. This comes embedded in the Codebase Manager, so now when you start up ucm it also starts a local web server that lets you browse and search your code in a delightful way.

@runarorama
runarorama / gist:a933af7794ae40d103231a65652314db
Created Jun 30, 2021
Arbitrary-precision naturals in Unison
View gist:a933af7794ae40d103231a65652314db
unique type Natural
= Natural (Nonempty Nat)
List.Nonempty.appendList : Nonempty a -> [a] -> Nonempty a
List.Nonempty.appendList = cases
Nonempty a as ->
use List ++
bs -> Nonempty a (as ++ bs)
List.dropRightWhile : (a ->{g} Boolean) -> [a] ->{g} [a]
View You who hold the fire in your heart.txt
You, Who Hold the Fire in Your Heart - Davíð Stefánsson, 1919
You, who hold the fire in your heart,
unhesitant and brave you go
into the abyssal, black darkness,
like a noble hero.
- The bright glow always beams
from the innovator's sacred ember.
Your words, they blaze, and all your blood;
View definitions.json
{
"typeDefinitions": [
[{
"tag": "ShortHash",
"prefix": "jk39javgi28eog9lmpblqeg6eb6dkv9f2eo1kauceki0h7g0t9tbg2oi3u4qioa5d0mioptr5548049odbuv9tg34s6foqs26hf1feg",
"cycle": null,
"cid": null
}, {
"tag": "UserObject",
"contents": [{
@runarorama
runarorama / list2.js
Last active Dec 19, 2020
base.list listing
View list2.js
{"namespaceListingChildren":[{"tag":"TermObject","contents":{"termName":"++","termHash":"##List.++","termType":[{"annotation":{"tag":"DelimiterChar"},"segment":"["},{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":{"tag":"DelimiterChar"},"segment":"]"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":null,"segment":" "},{"annotation":{"tag":"DelimiterChar"},"segment":"["},{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":{"tag":"DelimiterChar"},"segment":"]"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":null,"segment":" "},{"annotation":{"tag":"DelimiterChar"},"segment":"["},{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":{"tag":"DelimiterChar"},"segment":"]"}]}},{"tag":"TermObject","contents":{"termName":"at","termHash":"##List.at","termType":[{"annotation":{"tag":"Reference","contents":{"tag":"Builtin","contents":"Nat"}},"segment":"Nat"},{"annotation":null,"segment":" "},{"anno
@runarorama
runarorama / list.js
Created Dec 19, 2020
Namespace Listing
View list.js
{"namespaceListingChildren":[{"tag":"TermObject","contents":{"termName":"bug","termHash":"##bug","termType":[{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":null,"segment":" "},{"annotation":{"tag":"Var"},"segment":"b"}]}},{"tag":"TermObject","contents":{"termName":"todo","termHash":"##todo","termType":[{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":null,"segment":" "},{"annotation":{"tag":"Var"},"segment":"b"}]}},{"tag":"TermObject","contents":{"termName":".","termHash":"#0hoa6tis7604fo17o91lfjflsvd843uvm7sueu5rfqqn5nbneajoh9fldfbmmjnhh1h2690ktfflrbb96q9lksesuh3t5amcc1ph92g","termType":[{"annotation":null,"segment":"("},{"annotation":{"tag":"Var"},"segment":"b"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":{"tag":"AbilityBraces"},"segment":"{"},{"annotation":{"tag
View list.js
{"namespaceListingChildren":[{"tag":"TermObject","contents":{"termName":"bug","termHash":"##bug","termType":[{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":null,"segment":" "},{"annotation":{"tag":"Var"},"segment":"b"}]}},{"tag":"TermObject","contents":{"termName":"todo","termHash":"##todo","termType":[{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":null,"segment":" "},{"annotation":{"tag":"Var"},"segment":"b"}]}},{"tag":"TermObject","contents":{"termName":".","termHash":"#0hoa6tis7604fo17o91lfjflsvd843uvm7sueu5rfqqn5nbneajoh9fldfbmmjnhh1h2690ktfflrbb96q9lksesuh3t5amcc1ph92g","termType":[{"annotation":null,"segment":"("},{"annotation":{"tag":"Var"},"segment":"b"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":{"tag":"AbilityBraces"},"segment":"{"},{"annotation":{"tag
@runarorama
runarorama / list.json
Created Dec 19, 2020
Namespace listing sample data
View list.json
{"namespaceListingChildren":[{"tag":"TermObject","contents":{"termName":"bug","termHash":"##bug","termType":[{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":null,"segment":" "},{"annotation":{"tag":"Var"},"segment":"b"}]}},{"tag":"TermObject","contents":{"termName":"todo","termHash":"##todo","termType":[{"annotation":{"tag":"Var"},"segment":"a"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":null,"segment":" "},{"annotation":{"tag":"Var"},"segment":"b"}]}},{"tag":"TermObject","contents":{"termName":".","termHash":"#0hoa6tis7604fo17o91lfjflsvd843uvm7sueu5rfqqn5nbneajoh9fldfbmmjnhh1h2690ktfflrbb96q9lksesuh3t5amcc1ph92g","termType":[{"annotation":null,"segment":"("},{"annotation":{"tag":"Var"},"segment":"b"},{"annotation":null,"segment":" "},{"annotation":{"tag":"TypeOperator"},"segment":"->"},{"annotation":{"tag":"AbilityBraces"},"segment":"{"},{"annotation":{"tag
View openapi.json
{
"openapi": "3.0.0",
"info": {
"version": "",
"title": ""
},
"paths": {
"/list": {
"get": {
"parameters": [
@runarorama
runarorama / gist:e0b9107f707ef61db93eb67e4823798e
Created Jul 21, 2020
Jon Pretty seeks Rúnar's advice on writing better software
View gist:e0b9107f707ef61db93eb67e4823798e
Jon Pretty sat down with Rúnar Bjarnason to get help with becoming a better programmer.
Jon: Rúnar, how can I write better software?
--- Prompt ends
Rúnar: Stop making so many bugs.
Jon: What should I do before releasing my code?