Create state procs for state signals.
[matthijs/master-project/cλash.git] / HsValueMap.hs
index c2407f5ce7501600671a3cdf46a26250dab6dca0..97e4cdb5d261f33c9f642e9b4c059f628a0ff5b5 100644 (file)
@@ -54,3 +54,18 @@ mkHsValueMap ty =
         else
           Single ty
     Nothing -> Single ty
+
+-- | Creates a map of pairs from two maps. The maps must have the same
+--   structure.
+zipValueMaps :: 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 :: (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
+zipValueMapWith _ _ _ =
+  error $ "Trying to zip unsimilarly formed trees!"
+