Skip to content

yurtsiv/mooncake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

106 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation



Lint Review

Mooncake is a functional, dynamic programming language.

❗ A hobby project

Tutorial

Data types

let number = 1 let boolean = True let string = "Hello there!" let function = (a, b) do a + b end # Lists are heterogenous i.e. can contain elements of different types. It's a comment btw let list = [number, boolean, string, function] 

Operators

# Algebra let sum = 4 + 2 let sub = 4 - 2 let div = 4 / 2 let mul = 4 * 2 let mod = 4 % 2 # Comparison let eq = 2 == 2 let gt = 4 > 2 let gte = 4 >= 2 let lt = 2 < 4 let lte = 2 <= 4 # Boolean logic let false = !True let and = True && False let or = True || False # Lists/strings let list = [1, 2, 3] let firstElem = list(0) let listLen = len([1, 2, 3]) let strLen = len("Mooncake") let listConcat = [1, 2, 3] ++ ["Ready", "or", "not", "here", "I", "come"] let strConcat = "Hello" ++ " there" let strListConcat = "Hi" ++ [1, 2, 3] # will result in ["H", "i", 1, 2, 3] let listStrConcat = [1, 2, 3] ++ "Hi" # will result in [1, 2, 3, "H", "i"] 

Conditional expressions

# Conditional expressions are expressions, not statements i.e. they return something let truth1 = if 4 >= 2 then "4 is greater or equal than 2" else "4 is smaller than 2" end # No elseif yet let truth2 = if !(2 == 2) then "2 is not equal to 2" else if 3 == 2 then "3 is equal to 2" else "3 is not equal to 2" end end 

Functions

# The last statement of a function body is what the function returns let add = (x, y) do let sum = x + y sum end let three = add(1, 2) # Recursion let fib = (n) do if n < 3 then 1 else fib(n - 1) + fib(n - 2) end end # Higher order functions let mul = (x) do (y) do x * y end end let apply = (f, val) do f(val) end let eight = apply(mul(4), 2) 

Installation

Build from source

Install Stack

curl -sSL https://get.haskellstack.org/ | sh 

or

wget -qO- https://get.haskellstack.org/ | sh 

Clone the repo

git clone https://github.com/yurtsiv/mooncake.git && cd mooncake 

Build and install executable

stack install 

Run a programm

mooncake hello.mc 

TODO

Short-term

  • Floating point numbers
  • Character type
  • Boolean or & and
  • List elements access (list(0))
  • Built-in print function
  • /= operator
  • Higher order functions
  • Better error reporting
  • Automatic function currying
  • Documentation

Long-term

  • CLI
  • REPL
  • Module system
  • Virtual machine
  • Static type system (?)

Contributing

Feel free to create an issue or submit a PR (check out the development guide below). You can get in touch with me via E-mail yurtsiv.stepan@gmail.com

Development

  1. Install Stack
curl -sSL https://get.haskellstack.org/ | sh 

or

wget -qO- https://get.haskellstack.org/ | sh 
  1. Fork the repo

  2. Make changes in the forked repo on a separate branch (name of the branch should briefly describe the issue)

  3. Play around with your changes

stack run programm.mc 
  1. Run tests
stack test 
  1. If tests succeed, create a PR

Detailed explanation of how to create a Pull Request.

About

🌜 A functional, dynamic programming language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors