Really revert all of the recent rotating changes.
[matthijs/master-project/cλash.git] / HsValueMap.hs
index c2407f5ce7501600671a3cdf46a26250dab6dca0..f4498f20102a64d633859e2d06487c3963842ee1 100644 (file)
@@ -54,3 +54,19 @@ mkHsValueMap ty =
         else
           Single ty
     Nothing -> Single ty
+
+-- | Creates a map of pairs from two maps. The maps must have the same
+--   structure.
+zipValueMaps :: (Show a, Show b) => HsValueMap a -> HsValueMap b -> HsValueMap (a, b)
+zipValueMaps = zipValueMapsWith (\a b -> (a, b))
+
+-- | Creates a map of two maps using the given combination function.
+zipValueMapsWith :: (Show a, Show b) => (a -> b -> c) -> HsValueMap a -> HsValueMap b -> HsValueMap c
+zipValueMapsWith f (Tuple as) (Tuple bs) =
+  Tuple $ zipWith (zipValueMapsWith f) as bs
+zipValueMapsWith f (Single a) (Single b) =
+  Single $ f a b
+zipValueMapsWith _ a b =
+  --Tuple []
+  error $ "Trying to zip unsimilarly formed trees!\n" ++ (show a) ++ "\nand\n" ++ (show b)
+