namespace 0.1.2.3 → 0.1.3.0
raw patch · 2 files changed
+72/−3 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Namespace.Namespace: importAllFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> Namespace k a -> Namespace k a -> Either String (Namespace k a)
+ Data.Namespace.Namespace: importExceptFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> [k] -> Namespace k a -> Namespace k a -> Either String (Namespace k a)
+ Data.Namespace.Namespace: importFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> [k] -> Namespace k a -> Namespace k a -> Either String (Namespace k a)
+ Data.Namespace.Namespace: importQualifiedAllFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> Namespace k a -> Namespace k a -> Either String (Namespace k a)
+ Data.Namespace.Namespace: importQualifiedExceptFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> [k] -> Namespace k a -> Namespace k a -> Either String (Namespace k a)
+ Data.Namespace.Namespace: importQualifiedFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> [k] -> Namespace k a -> Namespace k a -> Either String (Namespace k a)
Files
- namespace.cabal +1/−1
- src/Data/Namespace/Namespace.hs +71/−2
namespace.cabal view
@@ -1,5 +1,5 @@ name: namespace-version: 0.1.2.3+version: 0.1.3.0 synopsis: A Generic Haskell library for managing namespaces description: Please see README.md homepage: https://github.com/xu-hao/namespace
src/Data/Namespace/Namespace.hs view
@@ -1,9 +1,14 @@ {-# LANGUAGE RankNTypes, StandaloneDeriving, GADTs, FlexibleInstances #-} +-- |+-- each of the import functions has an extra E version. The E version returns `Either String a` rather than `Maybe a`+ module Data.Namespace.Namespace ( Namespace, lookupNamespace, lookupObject, topLevelObjects, insertObject, insertNamespace, topLevelNamespaces, allObjects, importFromNamespace, importAllFromNamespace, importExceptFromNamespace,- importQualifiedFromNamespace, importQualifiedAllFromNamespace, importQualifiedExceptFromNamespace, toTree+ importQualifiedFromNamespace, importQualifiedAllFromNamespace, importQualifiedExceptFromNamespace,+ importFromNamespaceE, importAllFromNamespaceE, importExceptFromNamespaceE,+ importQualifiedFromNamespaceE, importQualifiedAllFromNamespaceE, importQualifiedExceptFromNamespaceE, toTree ) where import Prelude hiding (lookup)@@ -64,7 +69,7 @@ insertNamespace (NamespacePath (k : ks)) om (Namespace nm2 om2) = let nm3 = fromMaybe mempty (lookup k nm2) nm3' = insertNamespace (NamespacePath ks) om nm3 in- Namespace (insert k nm3' nm2) om+ Namespace (insert k nm3' nm2) om2 importAllFromNamespace :: Key k => NamespacePath k -> Namespace k a -> Namespace k a -> Maybe (Namespace k a) importAllFromNamespace np n (Namespace nm2 om2) = do@@ -111,6 +116,70 @@ then om2' else insert key o om2') mempty om return (insertNamespace p om' n2)++importAllFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> Namespace k a -> Namespace k a -> Either String (Namespace k a)+importAllFromNamespaceE np n (Namespace nm2 om2) =+ case lookupNamespace np n of+ Nothing -> Left ("importAllFromNamespaceE: cannot find " ++ show np ++ " in " ++ drawTree (fmap show (toTree n)))+ Just n' ->+ return (Namespace nm2 (topLevelObjects n' <> om2))++importFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> [k] -> Namespace k a -> Namespace k a -> Either String (Namespace k a)+importFromNamespaceE np keys n (Namespace nm2 om2) =+ case lookupNamespace np n of+ Nothing -> Left ("importFromNamespaceE: cannot find " ++ show np ++ " in " ++ drawTree (fmap show (toTree n)))+ Just n' -> do+ let om = topLevelObjects n'+ Namespace nm2 <$> foldM (\om2' key ->+ case lookup key om of+ Nothing ->+ Left ("importFromNamespaceE: cannot find " ++ show key ++ " at " ++ show np ++ " in " ++ show om)+ Just o ->+ return (insert key o om2')) om2 keys++importExceptFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> [k] -> Namespace k a -> Namespace k a -> Either String (Namespace k a)+importExceptFromNamespaceE np keys n (Namespace nm2 om2) =+ case lookupNamespace np n of+ Nothing -> Left ("importExceptFromNamespaceE: cannot find " ++ show np ++ " in " ++ drawTree (fmap show (toTree n)))+ Just n' -> do+ let om = topLevelObjects n'+ return (Namespace nm2 (foldlWithKey (\om2' key o ->+ if key `elem` keys+ then om2'+ else insert key o om2') om2 om))++importQualifiedAllFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> Namespace k a -> Namespace k a -> Either String (Namespace k a)+importQualifiedAllFromNamespaceE p n n2 =+ case lookupNamespace p n of+ Nothing -> Left ("importQualifiedFromNamespaceE: cannot find " ++ show p ++ " in " ++ drawTree (fmap show (toTree n)))+ Just n' ->+ return (insertNamespace p (topLevelObjects n') n2)++importQualifiedFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> [k] -> Namespace k a -> Namespace k a -> Either String (Namespace k a)+importQualifiedFromNamespaceE p keys n n2 =+ case lookupNamespace p n of+ Nothing -> Left ("importQualifiedFromNamespaceE: cannot find " ++ show p ++ " in " ++ drawTree (fmap show (toTree n)))+ Just n' -> do+ let om = topLevelObjects n'+ om' <- foldM (\om2' key ->+ case lookup key om of+ Nothing ->+ Left ("importQualifiedFromNamespaceE: cannot find " ++ show key ++ " at " ++ show p ++ " in " ++ show om)+ Just o ->+ return (insert key o om2')) mempty keys+ return (insertNamespace p om' n2)++importQualifiedExceptFromNamespaceE :: (Key k, Show k, Show a) => NamespacePath k -> [k] -> Namespace k a -> Namespace k a -> Either String (Namespace k a)+importQualifiedExceptFromNamespaceE p keys n n2 =+ case lookupNamespace p n of+ Nothing -> Left ("importQualifiedExceptFromNamespaceE: cannot find " ++ show p ++ " in " ++ drawTree (fmap show (toTree n)))+ Just n' -> do+ let om = topLevelObjects n'+ let om' = foldlWithKey (\om2' key o ->+ if key `elem` keys+ then om2'+ else insert key o om2') mempty om+ return (insertNamespace p om' n2) toTree :: Key k => Namespace k a -> Tree (Maybe k, Maybe a) toTree ns =