-record(monoid, {concat :: fun((any(), any()) -> any()), empty :: any()}).