`foo.erl`:
-module(foo).
-export([doit/0, doit/1, doit/2]).
doit() ->
doit.
doit(A) ->
[doit, A].
doit(A, B) ->
[doit, A, B].
Module `bar.erl` which 'mixes in' `foo`:
-module(bar).
-include_lib("mixer/include/mixer.hrl").
-mixin([foo]).
or all except specific functions from `foo`:
-module(bar).
-include_lib("mixer/include/mixer.hrl").
-mixin([{foo, except, [doit/0, doit/2]}]).
or only specific functions from `foo`:
-module(bar).
-include_lib("mixer/include/mixer.hrl").
-mixin([{foo, [doit/0, doit/2]}]).
Another version of `bar.erl` which mixes in all functions from `foo` and select functions from `baz`:
-module(bar).
-include_lib("mixer/include/mixer.hrl").
-mixin([foo, {baz, [doit/0, doit/1]}]).
One more version of `bar.erl` which mixes in `foo:doit/0` and renames it to `do_it_now/0`:
-module(bar).
-include_lib("mixer/include/mixer.hrl").
-mixin([{foo, [{doit/0, do_it_now}]}]).
Yet another version of `bar.erl` which mixes in all of `foo`'s public functions not implemented by `bar`.
In this case the functions `foo:doit/0` and `foo:doit/1` will be injected into `bar`.
```
-module(bar).
-include_lib("mixer/include/mixer.hrl").
-mixin([{foo, except, module}]).
-export([doit/2]).
doit(A, B) ->
[bar_did_it, A, B].
```
The original motivation for this parse transform was to permit reuse of functions implementing common
logic for tasks such as signature verification and authorization across multiple webmachine resources.