The final type of macro that we are going to look at is one that allows you to create custom NDL patterns. These are called
**NDL macros** and work like this:
## Syntax
A NDL macro can be created in Nessa using this syntax:
```
syntax ndl macro_name from NDL_Pattern {
[...]
}
```
This macro would have to create a string that can be parsed as an NDL pattern. This syntax can then be used safely inside any
implicit class syntax or macro.
This would be an example that transforms a pattern into a series of that pattern separated by commas (again, note that we need to
escape the closing brace):
```
syntax ndl comma_separated from "#" s Arg(<ndl>, inner) s "#" {
$inner { ", " $inner \}
}
// Usage example
class Ints {
// This pattern es equivalent to "[" Arg(1{d}, ints) {", " Arg(1{d}, ints)} "]"
syntax from "[" # Arg(1{d}, ints) # "]";
ints: Array<Int>;
}
let a: Ints = [1, 2, 3];
```