morloc

mcp
Security Audit
Fail
Health Pass
  • License — License: Apache-2.0
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 215 GitHub stars
Code Fail
  • rm -rf — Recursive force deletion command in data/lang/py/init.sh
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

A strongly-typed, polyglot compiler

README.md

github release   license: Apache 2.0   Manual   Discord   Paper   X   BlueSky   Email

Composition

Morloc

compose functions across languages under a common type system

Why use Morloc?

  • Universal function composition: Import functions from multiple languages and
    compose them together under a unified, strongly-typed functional framework.

  • Polyglot without boilerplate: Use the best language for each task with no
    manual bindings or interop code.

  • Generate APIs, CLIs, and MCPs as views of the same underlying library with no
    extra code (or AI).

  • Morloc programs (and their API/CLI/MCP views) can be composed by simply
    importing them into a new Morloc module and re-exporting their functions.

  • Seamless benchmarking and testing: Swap implementations and run the same
    benchmarks/tests across languages with consistent type signatures and data
    representation.

  • Design universal libraries: Build abstract, type-driven libraries and
    populate them with foreign language implementations, enabling rigorous code
    organization and reuse.

  • Smarter workflows: Replace brittle application/file-based pipelines with
    faster, more maintainable pipelines made from functions acting on structured
    data.

Below is a simple example, for installation details and more examples, see the
Manual.

A Morloc module can import functions from foreign languages, assign them general
types, and compose new functions:

-- Morloc code, in "main.loc"
module m (vsum)

import root-py
import root-cpp

source Py from "foo.py" ("pmap")
pmap a b :: (a -> b) -> [a] -> [b] 

source Cpp from "foo.hpp" ("sum")
sum :: [Real] -> Real

--' Input numeric lists that will be summed in parallel
--' metavar: LISTS 
type Lists = [[Real]]

--' Sum a list of numeric lists
--' return: Final sum of all elements in all lists 
vsum :: Lists -> Real
vsum = sum . pmap sum 

The imported code is natural code with no Morloc-specific dependencies.

Below is the C++ code that defines sum as a function of a standard C++ vector
of doubles that returns a double:

// C++ code, in "foo.hpp"

#pragma once

#include <vector>
#include <numeric>

double sum(std::vector<double> xs) {
    return std::accumulate(
       xs.begin(), xs.end(), 0.0);
}

Below is Python code that defines a parallel map function:

# Python code, in "foo.py"

import multiprocessing as mp

# Parallel map function
def pmap(f, xs):
    with mp.Pool() as pool:
        results = pool.map(f, xs)
    return results

This program can be compiled and run as below:

$ morloc make main.loc

$ ./nexus vsum -h
Usage: ./nexus vsum LISTS

Sum a list of numeric lists 

Positional arguments:
  LISTS  Input numeric lists that will be summed in parallel
         type: [[Real]]

Return: Real
  Final sum of all elements in all lists

$ ./nexus vsum [[1.2],[0,0.1]]
1.3

Reviews (0)

No results found