https://github.com/unisonweb/unison
A friendly programming language from the future
https://github.com/unisonweb/unison
hacktoberfest haskell programming-language unison unison-language
Last synced: 17 days ago
JSON representation
A friendly programming language from the future
- Host: GitHub
- URL: https://github.com/unisonweb/unison
- Owner: unisonweb
- License: other
- Created: 2015-05-06T14:53:49.000Z (almost 10 years ago)
- Default Branch: trunk
- Last Pushed: 2024-10-29T04:44:43.000Z (6 months ago)
- Last Synced: 2024-10-29T15:09:27.030Z (6 months ago)
- Topics: hacktoberfest, haskell, programming-language, unison, unison-language
- Language: Haskell
- Homepage: https://unison-lang.org
- Size: 101 MB
- Stars: 5,778
- Watchers: 108
- Forks: 270
- Open Issues: 1,126
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
- awesome-list - unison
- StarryDivineSky - unisonweb/unison
- awesome-ccamel - unisonweb/unison - A friendly programming language from the future (Haskell)
- my-awesome - unisonweb/unison - language,unison,unison-language pushed_at:2025-04 star:6.0k fork:0.3k A friendly programming language from the future (Haskell)
README
The Unison language
===================[](https://github.com/unisonweb/unison/actions/workflows/ci.yaml?query=branch%3Atrunk)
[](https://github.com/unisonweb/unison/actions/workflows/pre-release.yaml)* [Overview](#overview)
* [Building using Stack](#building-using-stack)
* [Language Server Protocol (LSP)](docs/language-server.markdown)
* [Codebase Server](#codebase-server)
* [Configuration](./docs/configuration.md)
Overview
--------[Unison](https://unison-lang.org) 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](https://www.unison-lang.org/learn/the-big-idea/), 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](https://unison.cloud) for building distributed systems.
Here is some sample code:
```Haskell
-- A comment!
-- Function signatures appear before the definition
factorial : Nat -> Nat
factorial n = product (range 0 (n + 1))-- Signatures can 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 with `, which works for lists and also user-defined data types.
Other resources:
* [Learn about the big idea behind Unison](https://www.unison-lang.org/learn/the-big-idea/)
* Check out [the project website](https://unison-lang.org)
* Say hello or lurk [in the Discord chat](https://unison-lang.org/discord)
* Explore [the Unison ecosystem](https://share.unison-lang.org/)
* [Learn Unison](https://www.unison-lang.org/learn/)Building using Stack
--------------------If these instructions don't work for you or are incomplete, please file an issue.
The build uses [Stack](http://docs.haskellstack.org/). If you don't already have it installed, [follow the install instructions](http://docs.haskellstack.org/en/stable/README.html#how-to-install) for your platform. (Hint: `brew update && brew install stack`)
```sh
$ 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
```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](https://github.com/unisonweb/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.markdown`](development.markdown) for a list of build commands you'll likely use during development.
Language Server Protocol (LSP)
------------------------------View Language Server setup instructions [here](docs/language-server.markdown).
Codebase Server
---------------When `ucm` starts it starts a Codebase web server that is used by the
[Unison Local UI](https://github.com/unisonweb/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](docs/configuration.md)