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 *******\""