https://www.unison-lang.org/ Unison Learn Community Browse code on Unison Share Unison Share Search Blog Unison --------------------------------------------------------------------- A new approach to Distributed programming No more writing encoders and decoders at every network boundary. Say where you want computations to run and it happens -- Dependencies are deployed on the fly. Learn More Refactoring Your codebase is always live and typechecks, even in the middle of a refactoring. Unison has structured refactoring sessions, not a big misleading list of type errors. Learn More Durable storage No more writing translation code between your values and the storage layer. Directly store values and unpersist them later without fear of dependency conflicts or version mismatches. Learn More Storing code Other tools try to recover structure from text; Unison stores code in a database. This eliminates builds, provides for instant nonbreaking renames, type-based search, and lots more. Learn More Dependencies Many dependency conflicts arise from definitions competing for the same names. Since Unison references code by hash instead of by name, an entire class of conflicts can be eliminated. Learn More Unison is a friendly programming language from the future: statically-typed, functional, and a lot of fun $ [brew install unisonw] $ [curl --proto '=https] Download the latest release from GitHub How does Unison code look? All parts of the code examples are interactive. Click a dependency to read its definition and docs. Hello World The classic Hello World program in Unison is as simple as a call to printLine. helloWorld : '{IO, Exception} () helloWorld : '{IO, Exception} () helloWorld _ = printLine "Hello World" {IO, Exception}indicates which abilities the program needs to do I/O and throw exceptions. ' is used to denote a delayed computation. Learn more about Abilities. Distributed map-reduce With a few lines of code, you can perform a distributed map-reduce using theRemoteability. distributedEx : Seq k Nat ->{Remote} Nat distributedEx : Seq k Nat ->{Remote} Nat distributedEx dseq = dseq |> Seq.map (x -> x + 1) |> Seq.filter (x -> mod x 7 == 0) |> Seq.reduce 0 (+) Learn more about Remote and working withdistributed datasets in Unison. HTTP request Perform effectful code, like HTTP requests withAbilitiesandAbility handlers. Checkout more HTTP examples in thestew.http library. httpEx : '{IO, Exception} Response httpEx : '{IO, Exception} Response httpEx _ = host = HostName "unison-lang.org" web = Authority None host None path = Path.root / "learn" uri = Uri https (Some web) path Query.empty None req = Request.get uri handle request req with Http.handler Unison at a glance: get a complete overview of Unison with many more examples. Learn More (c) 2022 Unison Computing, a public benefit corp and contributors.