moduleCluster :: ModIface -> Dot TL.Text
moduleCluster iface@ModIface{..} = do
  cluster (Str (ifaceName iface)) $ do
    graphAttrs [textLabel (ifaceName iface)]
    node (ifaceDummyNodeName iface) [Style [SItem Invisible []]]
    mapM node' exports
  mapM_ (ifaceUsageEdges iface) mi_usages
  where exports = map (pack . getOccString . availName) mi_exports
moduleCluster :: ModIface -> Dot TL.Text
moduleCluster iface@ModIface{..} = do
  cluster (Str (ifaceName iface)) $ do
    graphAttrs [textLabel (ifaceName iface)]
    node (ifaceDummyNodeName iface) [Style [SItem Invisible []]]
    mapM node' exports
  mapM_ (ifaceUsageEdges iface) mi_usages
  where exports = map (pack . getOccString . availName) mi_exports
moduleCluster iface@ModIface{..} = do
  cluster (Str (ifaceName iface)) $ do
    graphAttrs [textLabel (ifaceName iface)]
    node (ifaceDummyNodeName iface) [Style [SItem Invisible []]]
    mapM node' exports
  mapM_ (ifaceUsageEdges iface) mi_usages
  where exports = map (pack . getOccString . availName) mi_exports