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