Comment Comment by grantjpowell > now you need a Monad"need a Monad" sounds scary but in practice it looks like this impl<T> Secret<T> { pub fn map<U>(&self, func: impl FnOnce(&T) -> U) -> Secret<U> { Secret(func(&self.0)) } pub fn flat_map<U>(&self, func: impl FnOnce(&T) -> Secret<U>) -> Secret<U> { func(&self.0) } } If you need an escape hatch for something more complicated, you could provide an api to that impl<T> Secret<T> { pub unsafe fn reveal(&self) -> &T { &self.0 } } parent grantjpowell 3 years ago
"need a Monad" sounds scary but in practice it looks like this
If you need an escape hatch for something more complicated, you could provide an api to that