-- (ReaderT GitConfig (WithErr a)) could be a useful monad here
updateRepo :: P.Product -> P.ProductID -> GitConfig -> WithErr String
updateRepo prod prodID gitConfig =
  (liftIO $ createRequiredDirectories prodID gitConfig)
    >> updateGitRepo (productRepoUrl prod) prodID gitConfig
updateRepo :: P.Product -> P.ProductID -> GitConfig -> WithErr String
updateRepo prod prodID gitConfig =
  (liftIO $ createRequiredDirectories prodID gitConfig)
    >> updateGitRepo (productRepoUrl prod) prodID gitConfig
updateRepo prod prodID gitConfig =
  (liftIO $ createRequiredDirectories prodID gitConfig)
    >> updateGitRepo (productRepoUrl prod) prodID gitConfig