sig type 't monoid = { mempty : 't; mappend : '-> '-> 't; } end