/// Something external that can be used in a VM Primitive
pub trait PrimitiveData {
    fn as_debug(&self) -> Option<&dyn std::fmt::Debug> {
        None
    }

    fn as_datum(&self) -> Option<&dyn PrimitiveDatum> {
        None
    }

    fn type_name(&self) -> &str {
        std::any::type_name_of_val(self)
    }
}

/// Something that has a canonical datum representation
pub trait PrimitiveDatum: PrimitiveData {}