@@ -301,11 +301,52 @@ Regular: **2-fixed**.
301[%baz p=0]
301[%baz p=0]
306+`[%bspd p=spec q=hoon]`: repair a value of a tagged union type
310+Regular: **2-fixed**.
313+$&(combined-mold=spec normalizing-gate=hoon)
315+Here `combined-mold` is a tagged union type (typically made with `$%`) and `normalizing-gate` is a
316+gate which accepts values of `combined-mold` and normalizes them to be of one particular type
321+The product of the normalizing gate and sample.
325+The default of the last type listed in `p`, normalized with the normalizing gate.
329+This rune is used to "upgrade" or "repair" values of a structure, typically from
330+an old version to a new version. For example, this may happen when migrating state after
338++$ combined $%(old new)
339++$ adapting $&(combined |=(?-(-.a %0 [%1 1 +.a], %1 a)))
341+Here `adapting` is a structure that bunts to `[%1 ^]` but also normalizes from
342+`[%0 @]` if called on such a noun.
304### `$~` "bucsig"
345### `$~` "bucsig"
306`[%bssg p=hoon q=spec]`: define a custom type default value
347`[%bssg p=hoon q=spec]`: define a custom type default value
308−## Product
349+##### Product
310Creates a structure (custom type) just like `q`, except its default value is `p`.
351Creates a structure (custom type) just like `q`, except its default value is `p`.
@@ -343,6 +384,7 @@ First, let's define a type without using `$~`:
343[%two 478.560.413.032]
384[%two 478.560.413.032]