sig
  type 'a wrap = private { data : 'a; id : Dug.Id.t; }
  val mutate :
    ('a, 'b, 'c) Reins.Dug.t ->
    (Dug.Id.t -> 'b) ->
    ('-> 'd) -> 'Reins.DugExtractor.wrap -> 'Reins.DugExtractor.wrap
  val mutate2 :
    ('a, 'b, 'c) Reins.Dug.t ->
    (Dug.Id.t -> 'b) ->
    ('-> '-> 'd) ->
    'Reins.DugExtractor.wrap ->
    'Reins.DugExtractor.wrap -> 'Reins.DugExtractor.wrap
  val observe :
    ('a, 'b, 'c) Reins.Dug.t ->
    '-> ('-> 'e) -> 'Reins.DugExtractor.wrap -> 'e
  val observe2 :
    ('a, 'b, 'c) Reins.Dug.t ->
    '->
    ('-> '-> 'e) ->
    'Reins.DugExtractor.wrap -> 'Reins.DugExtractor.wrap -> 'e
  val generate :
    ('a, 'b, 'c) Reins.Dug.t ->
    (Dug.Id.t -> 'a) -> '-> 'Reins.DugExtractor.wrap
end