Note: See Giml for further development instead.

Example Code

// linked list data type and map operation

def main() :=
	ffi( "console.log", head(map(fun(x) -> add(x, 1), list)) )

type List a =
	| Nil {}
	| Cons { head : a, tail : List a }
end

def list :=
	Cons { head = 1, tail = Cons { head = 2, tail = Nil {} } }

def head(list) :=
	case list of
		| Cons { head = head } ->
			head
	end

def map(f, xs) :=
	case xs of
		| Nil {} -> Nil {}
		| Cons { head = x, tail = rest } ->
			Cons { head = f(x), tail = map(f, rest) }
	end

Features

  • ✓ First-class Functions
  • ✓ Algebraic Data Types
  • ✓ Pattern Matching
  • ✓ Extensible Records
  • ✓ Static Typing & Type Inference
  • ✓ Written in Haskell
  • ✓ Targets JavaScript

More info here.

More Information?

The main repository for Strema lives on Gitlab.com/gilmi/strema, though there's also a Github mirror for those who prefer to follow that instead.

Note that the issues trackers are good places to ask questions, but pull/merge requests will not be accepted at this time.

Visit the docs for implementation details. There's also an overview document describing some less trivial features and how they're implemented.

Streaming? When and Where?

Live coding sessions are streamed on twitch and are then uploaded to youtube.

I stream about two times a week, usually Sunday and Wednesday, on european mornings. My twitch schedule contains the most up to date information.

Haskell?

Yeah! I think Haskell is really great and a very good fit for writing compilers.

If you are interested in this project but aren't really familiar with Haskell, worry not! I've written a bunch of material hoping to help people get started with Haskell easily, including:

I've also compiled a list of resources on writing compilers for functional languages:

Do let me know if these tutorials helped you :)

Why?

Because it's fun!

But also because I'd like to make Haskell and building compilers more approachable.

Who am I?

I'm Gil, also known as gilmi or suppi. I do a bunch of stuff with Haskell. My website has more information about me, my open source projects and tutorials :)