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