+
+-- | Try to fetch "import" object and merge it into the base domain
+-- Any errors are ignored, and nothing is merged.
+-- Original "import" element is removed, but new imports from the
+-- imported objects are processed recursively until there are none.
+mergeImport ::
+ (ByteString -> IO (Either String ByteString)) -- ^ query operation action
+ -> NmcDom -- ^ base domain
+ -> IO NmcDom -- ^ result with merged import
+mergeImport queryOp base = do
+ let base' = base {domImport = Nothing}
+ -- print base'
+ case domImport base of
+ Nothing -> return base'
+ Just key -> do
+ sub <- queryNmcDom queryOp (L.pack key)
+ case sub of
+ Left e -> return base'
+ Right sub' -> mergeImport queryOp $ sub' `mergeNmcDom` base'