An entire language built around only a few core concepts.

Sweet and Simple

The Quill language only consists of a few core features using which everything else is defined. It is statically typed and garbage collected so that you can actually focus on what is important.

fun fibonacci() -> mut Stream[Int] { mut a = 0 mut b = 1 return Stream::new(|| { b = a + b a = b - a return a }) } fun main() { for n: fibonacci() |> take(20) { println(n) } }
struct Node[T](value: T, prev: Option[mut Node[T]]) struct Stack[T](top: Option[mut Node[T]]) fun Stack::empty[T]() -> mut Stack[T] = Stack(Option::None) fun Stack::push[T](s: mut Stack[T], value: T) { s.top = Option::Some(Node(value, s.top)) } fun Stack::pop[T](s: mut Stack[T]) -> Option[T] = s.top |> map(|n| { s.top = n.prev return n.value }) fun main() { val s: mut Stack[Int] = Stack::empty() s |> push(5) s |> push(10) s |> pop() |> println() s |> pop() |> println() s |> pop() |> println() }
The Ecosystem

The Quill project includes a compiler, standard library, package manager and a growing collection of libraries. There are libraries for interacting with the operating system, parsing JSON and manipulating the page in a frontend environment.

Powerful

The Quill compiler, this website and most parts of the ecosystem are all written in Quill itself.

This is possible because programs written in Quill can be compiled to C and Javascript, allowing not only for fast, native execution but also for your programs to run in the browser.

fun fizzbuzz(n: Int, mappings: List[Pair[Int, String]]) -> String { val o: String = mappings |> values() |> filter(|m| n % m.first == 0) |> fold("", |r, m| r |> concat(m.second)) return if o |> is_empty() { n |> as_string() } else { o } } val MAPPING: List[Pair[Int, String]] = List::of( Pair(3, "Fizz"), Pair(5, "Buzz"), Pair(7, "Bazz") ) fun main() = range_incl(1, 100) |> for_each(|i| fizzbuzz(i, MAPPING) |> println())