struct President =
(name: String, age: Int)
is Person
satisfies (it.age > 35)

Indigo is an experimental programming language that aims to be a friendly, functional and flexible.

Friendly

Indigo has a number of convinience methods that make it easy to work with various data types out of the box

print ["London", "Paris", "Vienna"] - ["Paris"]

Functional

Indigo is built for functional programming. This allows developers to build consistent and beautiful code

print (map (`*`3), [2, 4, 6, 8])

Structured

Indigo provides several language features that aim to make working with data and structures easy and intuitive.

struct Person = (name: String, age: Int)
let peter = Person { name: "Peter", age: 24 }
println peter.name : " is " : (peter.age) as String : " years old"

Pattern matching

Indigo provides pattern matching, which allows you to match on data structures and extract values from them easily

let head ([]: [Any]) = 0
let head ((x:xs): [Any]) = x
print head [1,2,3]

Roadmap

Indigo is still in its early stages. Here are some of the features that are considered for the future:

More advanced type system
Proper module system
Package manager/build system
Compile to native

Do mind that Indigo is just a pet project by a passionate developer and it might never become anything of note. The purpose is more to explore the design space of programming languages and to learn about language design for me.