packages feed

Mapping 0.1.0.1 → 1.0.0.0

raw patch · 2 files changed

+17/−5 lines, 2 files

Files

Mapping.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                Mapping-version:             0.1.0.1+version:             1.0.0.0 synopsis:            Mapping -- description:          homepage:            https://github.com/zaoqi/Mapping.hs
Mapping.hs view
@@ -13,14 +13,16 @@ --    You should have received a copy of the GNU Affero General Public License --    along with this program.  If not, see <http://www.gnu.org/licenses/>. module Mapping(-    Mapping(),+    Mapping(MappingNil),     mappingRef,     mappingSet,     mappingUnion,     mappingMayRemove,+    mappingRemove,     mappingHas,     mappingToList,     listToMapping,+    mappingAppendList,     ) where  type List a = [a]@@ -60,10 +62,18 @@ mappingMayRemove (MappingNode l mk v r) k =     case compare k mk of         LT -> MappingNode (mappingMayRemove l k) mk v r-        EQ -> MappingNil+        EQ -> mappingUnion (\k v1 v2 -> error "!") l r         GT -> MappingNode l mk v (mappingMayRemove r k) mappingMayRemove MappingNil _ = MappingNil +mappingRemove :: Ord k => Mapping k v -> k -> Maybe (Mapping k v)+mappingRemove (MappingNode l mk v r) k =+    case compare k mk of+        LT -> fmap (\l -> MappingNode l mk v r) (mappingRemove l k)+        EQ -> Just (mappingUnion (\k v1 v2 -> error "!") l r)+        GT -> fmap (\r -> MappingNode l mk v r) (mappingRemove r k)+mappingRemove MappingNil _ = Nothing+ mappingHas :: Ord k => Mapping k v -> k -> Bool mappingHas (MappingNode l mk v r) k =     case compare k mk of@@ -77,8 +87,10 @@ mappingToList MappingNil = []  listToMapping :: Ord k => List (k, v) -> Mapping k v-listToMapping ((k, v) : xs) = mappingSet (listToMapping xs) k v-listToMapping [] = MappingNil+listToMapping xs = mappingAppendList MappingNil xs++mappingAppendList :: Ord k => Mapping k v -> List (k, v) -> Mapping k v+mappingAppendList m xs = foldl (\h (k, v) -> mappingSet h k v) m xs  instance (Eq k, Eq v) => Eq (Mapping k v) where     x == y = mappingToList x == mappingToList y