Configurable types
A big benefit of making types configurable by closures, rather than hard-coding their behaviors, is that it makes it trivial to add new capabilities. For example, here’s how I'm adding a Splash plugin to my upcoming static site generator using a configurable type:
extension PipelineBuilder {
mutating func splash() {
customStep { context in
context.siteMap.transformItems { item in
item.body = MarkdownDecorator().decorate(item.body)
}
}
}
}