packages feed

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 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 =