main

Where

Let main args.
    Let config. (load_config args)
    In
    Let program. (SYNTAX.analyze config.root_path)
    In
    Let program. (SEMANTICS.analyze program)
    In
    Let program. (MECHANICS.analyze program)
    In
    (C.emit program)

Where

Let C. Package "c"
Let MECHANICS. Package "mechanics"
Let SEMANTICS. Package "semantics"
Let SYNTAX. Package "syntax"

Where

Let load_config args.
    Let root_path.
        Match (LIST.fetch args 1)
        | `just.arg arg
        | `nothing (OS.die "Usage error.")
        ;
    In
    {
        Let root_path. root_path
    }

Where

Let LIST. Package "list"
Let OS. Package "os"