Mapping 0.1.0.1 → 1.0.0.0
raw patch · 2 files changed
+17/−5 lines, 2 files
Files
- Mapping.cabal +1/−1
- Mapping.hs +16/−4
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