
Tutorial of Nulan – Lisp with Pattern Matching, Hygienic Macros and More - vmorgulis
http://pauan.github.io/nulan/doc/tutorial.html
======
vmorgulis
GitHub: [https://github.com/Pauan/nulan](https://github.com/Pauan/nulan)

~~~
broguinn
Thank you so much for the interactive tutorial! Due to its LISP-like nature,
hygienic macros, and interactions with user interfaces, is Nulan related to
Dylan?
[https://en.wikipedia.org/wiki/Dylan_(programming_language)](https://en.wikipedia.org/wiki/Dylan_\(programming_language\))

I'd love to see some examples of pattern matching in the tutorial as well!

I see that you're in the steps of developing a 0.2... what are the expected
changes going to be?

~~~
vmorgulis
Sorry, I'm not the author.

About the features of the new version, maybe, you can ask him with a github
issue...

Edit: Here is the issue

[https://github.com/Pauan/nulan/issues/1](https://github.com/Pauan/nulan/issues/1)

------
Pauan
Hey guys, I'm the creator of Nulan.

There were some bugs in the tutorial, which I fixed just now. If the tutorial
wasn't working for you, please try again.

\----

This is a pleasant surprise: I honestly was not expecting this, since Nulan is
not yet ready to show off.

As explained on the GitHub page, Nulan is currently in development, and does
not work.

The tutorial is for a _very_ old version of Nulan from January 2013.

From 2013 to 2016, Nulan has changed dramatically. The latest design of Nulan
barely resembles the tutorial.

Probably the biggest change is that Nulan is now statically typed rather than
dynamically typed. Its type system is very similar to Haskell, SML, OCaml,
etc.

Nulan is a purely functional language, like Haskell. Impure I/O is done using
the Task monad.

Nulan also has a feature which is very similar to Haskell's typeclasses,
giving a great amount of extensibility, flexibility, and abstraction.

\----

The current goal of Nulan is to merge the benefits of Haskell and Lisp, while
compiling to very efficient JavaScript code which can run in either the
browser or Node.js

I put a heavy emphasis on readability, correctness, performance, and
refactoring. I want Nulan to be the kind of language which makes refactoring
programs very easy.

\----

If you want a taste of the latest version of Nulan, I recommend taking a look
at this file:

[https://github.com/Pauan/nulan/blob/f008287f9ddeeffa0f20aa0d...](https://github.com/Pauan/nulan/blob/f008287f9ddeeffa0f20aa0d5ec2726303522143/notes/Current%20state.rst)

It lists all of the major features which are currently in Nulan's design.
Things are still in major flux, and are constantly changing.

\----

Nulan has been designed to make it easy to create high quality libraries, and
it includes a robust standard library, which you can find here:

[https://github.com/Pauan/nulan/tree/f008287f9ddeeffa0f20aa0d...](https://github.com/Pauan/nulan/tree/f008287f9ddeeffa0f20aa0d5ec2726303522143/builtin)

As proof of how rapidly Nulan is changing, some parts of the standard library
are using older Nulan syntax. They will eventually be updated to the latest
syntax.

\----

Nulan also has an FFI system, which makes it possible to use JavaScript
libraries in Nulan, bypass the static type system, add new features, or gain
additional performance.

A significant amount of Nulan's standard library is written using the FFI,
which you can find here:

[https://github.com/Pauan/nulan/tree/f008287f9ddeeffa0f20aa0d...](https://github.com/Pauan/nulan/tree/f008287f9ddeeffa0f20aa0d5ec2726303522143/ffi)

