Custom Inspect
An Opaque type can provide a custom implementation for the Inspect ability.
This can be useful for more complex types, or to hide internal implementation details.
Simple Tag Union
Color := [ Red, Green, Blue, ] implements [ Inspect { to_inspector: color_inspector }, ] color_inspector : Color -> Inspector fmt where fmt implements InspectFormatter color_inspector = |@Color(color)| when color is Red -> Inspect.str("_RED_") Green -> Inspect.str("_GREEN_") Blue -> Inspect.str("_BLUE_") expect Inspect.to_str(@Color(Red)) == "\"_RED_\"" expect Inspect.to_str(@Color(Green)) == "\"_GREEN_\"" expect Inspect.to_str(@Color(Blue)) == "\"_BLUE_\""
Redacting a Secret
MySecret := Str implements [ Inspect { to_inspector: my_secret_inspector }, ] my_secret_inspector : MySecret -> Inspector fmt where fmt implements InspectFormatter my_secret_inspector = |@MySecret(_)| Inspect.str("******* REDACTED *******") expect Inspect.to_str(@MySecret("password1234")) == "\"******* REDACTED *******\""