type step = | At of int| Mouth of int| Arg of int
type path = {script : int;steps : step list;
}type piece = | Body of {path : path;spec : Scratch_blocks.spec;x : float;y : float;w : float;h : float;mouths : (float * float) list;
}| Label of {x : float;y : float;text : string;
}| Slot of {path : path;part : Scratch_blocks.part;x : float;y : float;w : float;h : float;text : string;
}
type target = | Below of path| Above of int| In_mouth of path * int
val snap_distance : floatval block_at : piece list -> (float * float) -> path optionval slot_at : piece list -> (float * float) -> path option