Cookbook¶
Makrell# is most useful when you combine Makrell syntax with the CLR. This cookbook gathers short, task-oriented examples for the .NET track.
Use this section when you already know roughly what you want to do and need a working pattern rather than a full conceptual introduction.
Useful recipe areas¶
Typical Makrell# recipe areas include:
run a
.mrshfile from the CLIbuild an assembly and run it later
inspect generated C#
parse MRON and MRML from the CLI
use CLR types with Makrell-shaped generic forms
use
meta,def macro, andimportmcombine Makrell control flow with .NET libraries
Recipe: run and build¶
makrellsharp hello.mrsh
makrellsharp build hello.mrsh
makrellsharp run-assembly hello.dll
These commands cover the basic source-to-assembly workflow.
Recipe: inspect generated C#¶
makrellsharp emit-csharp hello.mrsh
This is useful when you want to understand how a Makrell# form lowers into the current generated C# module.
Recipe: CLR interop¶
{import System.Text}
sb = {new StringBuilder []}
{sb.Append "Makrell#"}
{sb.ToString}
This is the basic shape of many .NET interop tasks: import a type or namespace, construct an object, call CLR members, and let Makrell forms handle the surrounding flow.
Recipe: Makrell-shaped generics¶
names = {new (list string) ["Makrell" "Sharp"]}
counts = {new (dict string int) [["macros" 1] ["interop" 1]]}
parts = {new (array string) ["Mak" "rell#"]}
Makrell# uses Makrell-shaped type forms instead of C# generic notation directly.
Recipe: parse MRON and MRML¶
makrellsharp parse-mron sample.mron
makrellsharp parse-mrml sample.mrml
Use these commands when you want to exercise the format parsers through the same implementation track.
Recipe: meta and macros¶
{meta
greeting = {quote "Hello"}}
{def macro hello [ns]
{quote {String.Join " " [{unquote greeting} "from Makrell#"]}}}
This shows the basic compile-time shape: use meta for compile-time values
and helpers, and def macro for syntax transformation.
Recipe: inspect replayable compile-time metadata¶
makrellsharp build macros.mrsh
makrellsharp meta-sources macros.dll
This is useful when you want to inspect the compile-time sources that have been embedded for later replay.
Recipe: a generic collection workflow¶
names = {new (list string) ["Makrell" "Sharp"]}
{String.Join " " names}
Recipe: a simple match plus interop flow¶
{import System.Text}
value = [2 5]
result = {match value
[x=_ y=_]
{when x < y
x + y}
_
0}
sb = {new StringBuilder []}
{sb.Append "Result: "}
{sb.Append result}
{sb.ToString}
How to use this cookbook¶
If you are new to Makrell#, read Quick Start and Guide first. Then use the cookbook pages as a set of practical patterns you can adapt to your own .NET code.