summaryrefslogtreecommitdiff
path: root/testsuite/tests/simplCore/should_compile/T20112A.hs
blob: a8f30efbc8550d4c98feac1bb94d8afc73e35624 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module T20112A (
    -- * Data structure
    AdjacencyMap, adjacencyMap, transpose, overlays

    ) where

import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
import qualified Data.Set        as Set

newtype AdjacencyMap a = AM {
    adjacencyMap :: Map a (Set.Set a) }

overlays :: Ord a => [AdjacencyMap a] -> AdjacencyMap a
overlays = AM . Map.unionsWith Set.union . map adjacencyMap

transpose :: Ord a => AdjacencyMap a -> AdjacencyMap a
transpose (AM m) = AM $ Map.foldrWithKey combine vs m
  where
    combine v es = Map.unionWith Set.union (Map.fromSet (const $ Set.singleton v) es)
    vs           = Map.fromSet (const Set.empty) (Map.keysSet m)