GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - unisonweb/unison: A friendly programming language from the future

BranchesTags
Open more actions menu

Latest commit

 

History

20,960 Commits
20,960 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
.vscode
.vscode
 
 
codebase2
codebase2
 
 
contrib
contrib
 
 
deps
deps
 
 
docs
docs
 
 
editor-support
editor-support
 
 
lib
lib
 
 
minify
minify
 
 
nix
nix
 
 
parser-typechecker
parser-typechecker
 
 
scripts
scripts
 
 
unison-cli-integration
unison-cli-integration
 
 
unison-cli-main
unison-cli-main
 
 
unison-cli
unison-cli
 
 
unison-core
unison-core
 
 
unison-hashing-v2
unison-hashing-v2
 
 
unison-merge
unison-merge
 
 
unison-runtime
unison-runtime
 
 
unison-share-api
unison-share-api
 
 
unison-share-projects-api
unison-share-projects-api
 
 
unison-src
unison-src
 
 
unison-syntax
unison-syntax
 
 
yaks/easytest
yaks/easytest
 
 
.editorconfig
.editorconfig
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.mailmap
.mailmap
 
 
.ormolu
.ormolu
 
 
CONTRIBUTORS.markdown
CONTRIBUTORS.markdown
 
 
CREDITS.md
CREDITS.md
 
 
Dockerfile
Dockerfile
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
config
config
 
 
dest.usync
dest.usync
 
 
dev-ui-install.sh
dev-ui-install.sh
 
 
development.md
development.md
 
 
flake.lock
flake.lock
 
 
flake.nix
flake.nix
 
 
hie.yaml
hie.yaml
 
 
stack.yaml
stack.yaml
 
 
stack.yaml.lock
stack.yaml.lock
 
 
weeder.toml
weeder.toml
 
 

Repository files navigation

The Unison language

CI Status Pre-Release Status

  • Overview
  • Building using Stack
  • Language Server Protocol (LSP)
  • Codebase Server
  • Configuration

Alt

Overview

Unison is a statically-typed functional language with type inference, an effect system, and advanced tooling. It is based around a big idea of content-addressed code, in which function are identified by a hash of their implementation rather than by name, and code is stored as its AST in a database. This provides a number of benefits:

  • No builds. Unison has perfect incremental compilation, with a shared compilation cache that is part of the codebase format. Despite the strong static typing, you are almost never waiting for code to compile.
  • Instant, non-breaking renaming of definitions.
  • Perfect caching of tests, only rerunning determinstic tests if dependencies changed.
  • Semantically-aware version control, avoiding spurious merge conflicts from things like order of imports, whitespace or code formatting differences, and so on.

Unison can be used like any other general-purpose language, or you can use it in conjunction with Unison Cloud for building distributed systems.

Here is some sample code:

-- A comment!
-- Function signatures appear before the definition
factorial : Nat -> Nat
factorial n = product (range 1 (n + 1))

-- Signatures can be left off; they will be inferred
List.map f as =
  go acc rem = match rem with
    [] -> acc
    a +: as -> go (acc :+ f a) as
  go [] as

> List.map (x -> x * 10) (range 0 10)
= [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

> List.map factorial [1,2,3,4]
= [1, 2, 6, 24]

Functions arguments are separated by spaces instead of parens and commas. Loops are written using recursion (above the helper function go defines a loop). The language supports pattern matching via match <expr> with <cases>, which works for lists and also user-defined data types.

Other resources:

  • Learn about the big idea behind Unison
  • Check out the project website
  • Say hello or lurk in the Discord chat
  • Explore the Unison ecosystem
  • Learn Unison

Building using Stack

If these instructions don't work for you or are incomplete, please file an issue.

The build uses Stack. If you don't already have it installed, follow the install instructions for your platform. (Hint: brew update && brew install stack)

$ git clone https://github.com/unisonweb/unison.git
$ cd unison
$ stack --version # we'll want to know this version if you run into trouble
$ stack build --fast --test && stack exec unison

The runtime's JIT compiler is off by default; unison --jit on turns it on, which needs an LLVM shared library installed. See usage.md for how to install LLVM and what to expect.

To run the Unison Local UI while building from source, you can use the /dev-ui-install.sh script. It will download the latest release of unison-local-ui and put it in the expected location for the unison executable created by stack build. When you start unison, you'll see a url where Unison Local UI is running.

See development.md for how to build, run, test and check the code.

Language Server Protocol (LSP)

View Language Server setup instructions here.

AI Agent Server (MCP)

View AI Agent Server setup instructions here.

Codebase Server

When ucm starts it starts a Codebase web server that is used by the Unison Local UI. It selects a random port and a unique token that must be used when starting the UI to correctly connect to the server.

The port, host and token can all be configured by providing environment variables when starting ucm: UCM_PORT, UCM_HOST, and UCM_TOKEN.

Configuration

See the documentation for configuration here

About

A friendly programming language from the future

unison-lang.org

Topics

hacktoberfesthaskellprogramming-languageunisonunison-language

Resources

Readme
License
Activity
Custom properties

Stars

6.8k stars

Watchers

98 watching

Forks

317 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.