
Unison – A statically-typed purely functional language - tosh
https://github.com/unisonweb/unison
======
crabl
I think the coolest aspect about Unison, is that they're trying to reify the
concept of a codebase
([http://unisonweb.org/2016-09-17/editing.html](http://unisonweb.org/2016-09-17/editing.html))
into something more than just a collection of lines of source code. You can
think of it more like a well-defined object that can be transformed in
coherent, strongly-typed ways. Unison identifies everything by a hash, so if
you "change" a function definition, you're not actually mutating any state in
the codebase, you're introducing a new function with a new hash.

------
gnode
> Unison is a new programming language, [...] similar to Haskell, but with a
> unique ability to describe entire distributed systems with a single program.

Is this not something that could be done in Haskell by defining a new monad
type? Perhaps also a tool to deploy such programs to the cluster would be
useful. It seems to me that this paradigm doesn't require a whole new
programming language, or that it wouldn't be as ergonomic in Haskell.

~~~
westoncb
It seems like that is part of the plan, e.g.:

 _The nodes being provisioned are all local nodes, running in the same node
container. Obviously we’d like to provision nodes running on other computers,
or provision from a managed cloud service (like unison.cloud, coming soon) and
/or a P2P mesh of nodes._

(From:
[http://unisonweb.org/2016-10-12/search.html](http://unisonweb.org/2016-10-12/search.html))

And further down on the original linked page there's some more info on
something it's using for the distributed system description that I don't
believe would be possible in Haskell:

 _This dynamic transfer / deployment of arbitrary computations is possible
because definitions in Unison are identified by a cryptographic hash of their
content, including the hashes of all dependencies (the hash is also "nameless"
as it isn't affected by naming of variables). ..._

I've been watching the project a bit here and there and it has a number if
interesting aspects to it For another example, check out the 'semantic
editor': [http://unisonweb.org/2016-03-16/semantic-vs-
text.html](http://unisonweb.org/2016-03-16/semantic-vs-text.html)

~~~
hota_mazi
When I read this:

    
    
        > If you look at what programmers spend their time doing when programming (other than thinking of course), it’s actually stuff like:
        >
        > - Adding imports to the code to be able to resolve names
        >
    

It makes me wonder whether the authors have used a modern IDE in the past ten
years.

The video in this page is also showing nothing that hasn't existed for years
in pretty much all IDE's under the sun.

~~~
westoncb
If you skim it, it will look that way.

What the editor is tackling has some overlap with common IDE features, but
it’s taking a deeper approach to addressing them.

You listed one item from a big list of tasks, but the more interesting thing
is what’s written after the list about how unison addresses the items.

And before demeaning the creators it may be worth it to look into their
background a bit and see if it’s more likely to you that they are unaware of
modern IDEs or if it’s possible you haven’t fully grasped some of their ideas
yet.

~~~
hota_mazi
I am well aware of their background (I own their book) and this is precisely
why I think they haven't used a lot of IDE's. Actually, these past years, I've
heard a few times from one of them claiming that with a good language, one
doesn't need an IDE.

------
refried_
Hi folks, I’m one of the authors of Unison (Programming Language). Didn’t
expect to see this on HN, but happy to try to answer questions about our pre-
alpha-release language :)

------
zelon88
This looks very promising. I'm curious though, is there any authentication
mechanism here? If I have Unison installed does it start a listener and
execute whatever code is sent to it?

~~~
refried_
There will be an authorization mechanism for distributed computation; we don’t
like arbitrary remote code execution!

------
adultSwim
I'm reminded of Ur/Web,
[http://www.impredicative.com/ur/](http://www.impredicative.com/ur/)

------
lioeters
Love this idea:

> This dynamic transfer / deployment of arbitrary computations is possible
> because definitions in Unison are identified by a cryptographic hash of
> their content, including the hashes of all dependencies (the hash is also
> "nameless" as it isn't affected by naming of variables).

> To transfer a computation, we send it to the recipient, and the recipient
> checks to see if the computation references any unknown hashes. Any unknown
> hashes are synced to the recipient before the transfer completes and the
> computation proceeds.

Previous discussion (2015):

[https://news.ycombinator.com/item?id=9512955](https://news.ycombinator.com/item?id=9512955)

------
ofrzeta
Also a file syncing tool by the same name, written in the ... functional
language Ocaml.

------
passthejoe
The name is already taken:

[https://www.cis.upenn.edu/~bcpierce/unison/](https://www.cis.upenn.edu/~bcpierce/unison/)

~~~
ModernMech
That's not a programming language. Different namespace.

~~~
toomim
No, but it's also in the space of functional programming language research.

~~~
zenhack
I don't think a file sync tool that happens to be written in OCaml qualifies
as FP research.

~~~
toomim
That's fair, but it was written by Ben Pierce of the FP research community.
It's nice not to have two projects named the same thing within the same
community.

------
hhas01
Related: [http://lambda-the-ultimate.org/node/5569](http://lambda-the-
ultimate.org/node/5569)

------
s4n1ty
Reminds me of Swarm: [http://swarmframework.org/](http://swarmframework.org/)

~~~
bitwalker
Indeed! (Hi Ian!)

------
bartq
Question: where is it used today?

~~~
zenhack
It's not; it's incredibly alpha quality. Like, I'm working on a parser
combinators library and step 1 was "add characters to the compiler."

