e' :: (Show ann, Typeable ann, MonadCatch m) => AnProcess ann -> m (S.Set (ProcessPosition, ProcessPosition))
pfRange' proc = do 
                   froms <- pfFrom proc
                   res   <- foldM  mapFlat S.empty froms
                   return res
                   where
                      mapFlat acc pos = do res <- flatten <$> pf proc pos 
                                           return (acc `S.union` S.map (\r -> (r,pos)) res)

pfRa
pfRange' :: (Show ann, Typeable ann, MonadCatch m) => AnProcess ann -> m (S.Set (ProcessPosition, ProcessPosition))
pfRange' proc = do 
                   froms <- pfFrom proc
                   res   <- foldM  mapFlat S.empty froms
                   return res
                   where
                      mapFlat acc pos = do res <- flatten <$> pf proc pos 
                                           return (acc `S.union` S.map (\r -> (r,pos)) res)
pfRange' proc = do 
                   froms <- pfFrom proc
                   res   <- foldM  mapFlat S.empty froms
                   return res
                   where
                      mapFlat acc pos = do res <- flatten <$> pf proc pos 
                                           return (acc `S.union` S.map (\r -> (r,pos)) res)