loadConfig :: Tu.Shell (Either String Config)
loadConfig = do
  configFilename <- getConfigFilename
  configContents <- Tu.liftIO $ (BS.readFile configFilename :: IO BS.ByteString)
  let eresults = Y.decodeEither' configContents :: Either Y.ParseException Config
  return (BF.first Y.prettyPrintParseException eresults)
loadConfig :: Tu.Shell (Either String Config)
loadConfig = do
  configFilename <- getConfigFilename
  configContents <- Tu.liftIO $ (BS.readFile configFilename :: IO BS.ByteString)
  let eresults = Y.decodeEither' configContents :: Either Y.ParseException Config
  return (BF.first Y.prettyPrintParseException eresults)
loadConfig = do
  configFilename <- getConfigFilename
  configContents <- Tu.liftIO $ (BS.readFile configFilename :: IO BS.ByteString)
  let eresults = Y.decodeEither' configContents :: Either Y.ParseException Config
  return (BF.first Y.prettyPrintParseException eresults)