heading

Macaca Nigra Language | MNL

makes learning to program easy.

MNL is a block-based functional programming language developed to facilitate programming education. It enables visualization of computational processes, including beta reduction and function evaluation. Additionally, MNL employs visual elements such as shape and color to convey semantic information to users.

learn more

It is an Easy-to-learn and understandable block-based functional programming language.

Easy to Learn

Just drag'n drop, then attach or detach the block.

Understandable

The keyword is a whole in English, not an abbreviation.

a Functional PL

It is a pure block-based functioan programming language.

The Capabilities of MNL

Reactive

Environment

Reactive means action and reaction. When user makes any changes , MNL will response it with the result of evaluation or error if any.

Shape & Color

Visualization

Assisting users by utilizing visual language capabilities: shapes and colors. Shapes will represent grammar, while colors will indicate value types.

YAKI

Environment

The Yet Another Compiler Interface (YAKI) is a robust tool designed to convert block-based MNL into text-based languages, including SML and Scala.

Beta Reduction

Program visualization

Bringing beta reduction to life with a visual that highlights how call-by-value and call-by-push-structure evaluation strategies unfold step by step.

Type Inference

Type system

Users do not need to declare the type explicitly! Let MNL do it for them (implicit typing).

Typing Suggestion

Type system

MNL will elegantly present a suggested term type in a color box, thoughtfully aligned with its type constraints.

Function value

Program visualization

MNL provides a tool named Tarsius, which visually represents the function value.

Typing Rule

Type system

Another YAKI capability is writing the typing derivation of MNL.

case study

In Action

heading

A picture is worth a thousand words

Anonymous

publication

Research Paper

Published

PAINT

2025

The MNL: A Block-Based Functional Programming Language with Reactive Blocks

On-going

An evaluation strategy for block-based language.