Ordered, immutable rule lists used by the Markdown parser.
-type handler() :: fun() | {module(), atom()}.
-type rule() :: #{name := atom(), enabled := boolean(), handler := handler()}.
-type ruler() :: [rule()].
-spec 'after'(atom(), atom(), handler(), ruler()) -> ruler().
-spec before(atom(), atom(), handler(), ruler()) -> ruler().
-spec disable(atom() | [atom()], ruler()) -> ruler().
-spec enable(atom() | [atom()], ruler()) -> ruler().
-spec new([{atom(), handler()}]) -> ruler().
-spec replace(atom(), handler(), ruler()) -> ruler().
-spec rules(ruler()) -> [rule()].