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