Skip to content
vic

puffnfresh/roy

Small functional language that compiles to JavaScript.

puffnfresh/roy.json
{
"createdAt": "2011-11-24T21:56:31Z",
"defaultBranch": "master",
"description": "Small functional language that compiles to JavaScript.",
"fullName": "puffnfresh/roy",
"homepage": "http://roy.brianmckenna.org/",
"language": "JavaScript",
"name": "roy",
"pushedAt": "2014-03-16T20:22:09Z",
"stargazersCount": 841,
"topics": [],
"updatedAt": "2025-08-25T14:58:30Z",
"url": "https://github.com/puffnfresh/roy"
}

Roy is a small functional language that compiles to JavaScript. It has a few main features:

  • Damas-Hindley-Milner type inference
  • Whitespace significant syntax
  • Simple tagged unions
  • Pattern matching
  • Structural typing
  • Monad syntax
  • Not-horrible JS output

To compile:

make deps
make

To enter a REPL:

./roy

To compile and run a .roy file:

./roy -r examples/helloworld.roy

To compile a .roy file to .js:

./roy examples/helloworld.roy
cat examples/helloworld.js

Input (test.roy):

let addTwo n =
n + 2
console.log (addTwo 40)

Output (test.js):

var addTwo = function(n) {
return n + 2;
}
console.log(addTwo(40))

Calling addTwo "test" will result in a compile-time error (addTwo can only take a Number).

See the examples directory for more.

MIT