// TODO: use a left/right option monad. Error management is getting painful // like wrap prettier in try catch with left/right associated,