s a
                            -> m (Either String a)
runDelayedCachedYamlLoaderL st base_dirs f = liftIO $ do
  err_or_x <- tryIOError $ try $ runReaderT (f base_dirs) st
  case err_or_x of
      Left err    -> return $ Left $ "failed to load from file: " ++ show err
      Right x     -> return $ parseMsgErrorToString x


parseMsgErrorToString :: Either YamlFileParseException a -> Either Str
runDelayedCachedYamlLoaderL_IOE :: ( MonadIO m)
                                => s
                                -> NonEmpty FilePath    -- ^ 消息文件存放目录
                                -> DelayedCachedYamlLoader s a
                                -> m (Either YamlFileParseException a)
runDelayedCachedYamlLoaderL_IOE st base_dirs f = liftIO $ try $ runReaderT (f base_dirs) st
runDelayedCachedYamlLoaderL_IOE st base_dirs f = liftIO $ try $ runReaderT (f base_dirs) st