แแแกแฃแ แแแคแฎแฃแแก แแแแแฆแ แแแแแฌแแแแแแ
แ แแแแ แช Google Summer of Code 2019-แแก แแแแแฌแแแแ, แแแแแแแแ แแ แแแฅแขแ แแแแแแแแแแแก แคแแ แแแแแจแ
แแ แแแกแขแจแ แแ แแแกแแฃแแ แแ แฐแแกแแแแจแ แแ แแฎแ แแแแแแก แแ แแคแแแแก แจแแกแแแแฌแแแแแแ แแแแแ แแแแแก แฉแแแก แแแแฎแแ แชแแแแแแแแ. แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแแแแ แแแแ แแ แ-แแ แแ แงแแแแแแ แซแแ แแแแแแ, แแแกแ แแแแแแแ แคแฃแแฅแชแแแแแแฃแ แกแขแแแจแ แแแแแ แแแแ แ แแแแแแแแ แแแแแแ แแแ แแแแญแแ แแ แแ แกแแแแแแ แแแแ แจแ แแแ แแแแญแแ แแ. แจแแแแแแ, แแ แแแแแแฌแงแแแขแ แแแแฎแแ แชแแแแแแ แแแแแแแก แขแ แแแกแคแแ แแแขแแ แแแแ.
แฉแแ แจแแกแแฎแแ
แแ แแฅแแแ แแแกแแแ แแแคแแ แแแ, แแแ แแแขแแ แแฃแ แแแก HSE-แแก แแแแแฎแ แแฃแ แกแแก แกแขแฃแแแแขแ. แแแ แ แแแแแแ แแแแฌแแ แ
แแแแแ แแแแแก แแแแฎแแ แชแแแแแแแก แจแแกแแฎแแ
แฌแแแแกแแขแงแแแแแ
แแ แแแ แแแแจแ แแแแแฌแแแ แกแขแฃแแแแขแแแก แแฃแ แฉแแแ แแแแแแ. แแแ แแแแชแแก แแแแแแก แแแแขแคแแ แแ
Pull Request แแแชแแแฃแแ แแแแแ แจแแแแซแแแแ แแฎแแแแ
แจแแแแซแแแแ แฌแแแแแแฎแแ แฉแแแ แแฃแจแแแแแก แจแแแแแแแแก แจแแกแแฎแแ (แแแแแแกแฃแ แแ)
แแก แแแกแขแ แแแแแแ แแกแแฎแแแก แแแแแฎแแแแก แแแแชแแแก แคแฃแแฅแชแแฃแ แ แแ แแแ แแแแ แแแแก แซแแ แแแแแ แชแแแแแแ, แแฃแแชแ แแแชแแแแ แแแแแฎแกแแแ แงแแแแ แแแแแงแแแแแฃแแ แขแแ แแแแ, แ แแชแ แแ แ แแแแ.
แแ แแคแแแแแแก แจแแแแฌแแแแ แแ แแฎแ แแแแแแแ
แแ แแคแแก แแ แแฎแ แแแแแแก แจแแแแฌแแแแแก แแแแแ แแแแ แฉแแแฃแแแแ แแ แแแชแแแฃแแแ แแแแแ แแแแแแแก แแฃแ แกแจแ, แ แแแแ แช แแ แ-แแ แแ แฃแแแ แขแแแแกแ แแ แแคแแแแก แแแแแ แแแแ. แแแกแ แแแแ แชแแแกแแฎแแ: แฏแแ แ แแขแแแฆแแช แแแแแแกแแแ แฌแแแ แแแแก แแแ แชแฎแแแ แแ แแแ แฏแแแแ แฌแแแจแ แแ แ แแแแกแแช แแฆแแแแแฉแแแ แฃแ แแแแ แแกแแฌแแแแแฆแแแแแ แแแแแก, แแแแขแแแชแแแ, แ แแ แแ แแคแแแ แแ แแ แแก แแ แแฎแ แแแ.
แชแแขแ แแแขแ แแแขแแแ: แฏแแ แแแ แชแฎแแแ แฌแแแจแ แฉแแแกแแแ แ แแฆแแช แฌแแแ แ. แชแฎแแแแ, แแ แฌแแแ แแก แงแแแแ แแแแแแแแ แฃแแแ แแงแแก แแแ แฏแแแแ แฌแแแจแ. แแแ แแ แแแแกแ, แแ แฌแแแ แแก แแแแแแแแแแก แงแแแแ แแแแแแแแ แฃแแแ แแงแแก แแแ แชแฎแแแ แฌแแแจแ แแ แ.แจ. แฉแแแ แแแแ แซแแแแแ แฌแแแแแแก แแแแแญแแแแก แฌแแแ แแแแแ แแแแแ, แกแแแแ แฏแแ แแแแแ แแ แแก แฌแแแ แแแแ แแ แฌแแแ แแแแแก แแแแแแจแแ แแแฃแ แแแแแแแแแขแจแ, แ แแแแแแแช แฉแแแ แแแแแฌแงแแ, แ แแแแแแกแแช แแแแแแแแแ แแ แแแแแแแญแแ. แฉแแแ แแแแแแ แแแ แแ แแแฅแแแแแแแก แงแแแแ แแแแแแจแแ แแแฃแแ แแแแแแแแแขแแกแแแแก.
แแฃ แแ แกแแแแแก แแฆแแแ แ แฌแแแ แแแแก แจแแ แแก, แ แแแแแแแช แแ แแกแ แแ แแแแแ แแแแแงแแคแจแ แฎแแแแแแแ, แซแแแแ แแ แแ แแก แแ แแคแแจแ แฃแชแแแฃแ แ แชแแแแแก แแแแแ, แ แแช แกแแงแแแแแแแแ แชแแแแแแแ (แแ แกแ แฃแแแแ แแจแแแ แแ) แจแแฃแซแแแแแแแ แแ แแฎแ แแ แแ แแคแแจแ. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แฉแแแ แแแแฅแแก แกแฌแแ แ แแแแแงแแคแ, แ แแช แแแจแแแแก, แ แแ แแ แแคแแแ แแ แแฎแ แแแแ.
แ แแแแ แช แฌแแกแ, แแก แแแแแ แแแแ แฎแแ แชแแแแแแแ แแแแแงแแแแแแ
แแแ แแแแ, แแแแแแแ แจแแแแแ แกแฅแแแแแแ. แฉแแแ แแแแแแ แแ แแคแแก แฌแแแ แแแแก แกแแฆแ แแ-แแแ แแแแ แซแแแแแก แแแแแงแแแแแแ แแ แแแแแญแแแ แแแ แฌแแแแแก, แแชแแแแ แฌแแแแก แ แแแแแแแแแก แแแแแแ แแแแแแแแแแแแแกแแก. แแฃ แฉแแแ แแชแแแแแแ แฌแแแแก แแแแแญแแแแก แฌแแแ แแแ, แ แแแแแกแแช แฃแแแ แแฅแแก แฌแแแ แแแแแญแแแฃแแ, แแแแแแแ แจแแแแแซแแแ แแแฅแแแ, แ แแ แแ แแคแแแ แแ แแ แแก แแ แแฎแ แแแ. แแ แแแแแแขแจแ, แ แแแแกแแช แงแแแแ แฌแแแ แแก แแแแญแแแ แฌแแแ แแ แฉแแแ แแแแแแฎแแแแ แงแแแแ แแแแแก, แแแแฅแแก แแแ แแ แแแแแงแแคแ.
แแแแแแแแแแแก แกแแกแฃแคแแแแ
แฐแแกแแแแจแ แฉแแแ แแแแ แแฃแแแแ, แ แแ แงแแแแ แแแแแแแแ แแ แแก แกแฃแคแแ. แแฃแแชแ, แแก แ แแ แแแ แแแแช แแกแ แงแแคแแแแงแ, แฉแแแ แแ แแแแฅแแแแแแ แกแแจแฃแแแแแ แ แแแแแก แแแแแญแแแ แแแ แแแแ. แฒกแแแ แแแ, แกแฃแคแแ แแแแแแแแแแ แแแแแแแ แแแ แแแชแแ, แ แแ แแ แชแแ แแ แแ แแ แแก แกแฃแคแแ แ แแแแแก แแแแแแแแแก แแแแแแแแ. แแ แแแ แแแแจแ แแแแฎแแแ แ แงแแแแ แแแแแแแแ แ แแขแแแฆแแช แแซแฃแแแแฃแแแ "แฃแฌแแแแแฃแ แ" แแแแแแ IO.
แแแแแแแแ แแ แแก แแแแแแแแแแแก แฌแแ แแแแแแแแก แกแแจแฃแแแแแ แแคแแฅแขแแแ แฐแแกแแแแจแ. แแแแก แแฎแกแแ, แแฃ แ แแแแ แแฃแจแแแแแ แแกแแแ, แกแชแแแแแแ แแ แแแกแขแแก แคแแ แแแแแก. แแแ แแ แแ แแแแคแแ แแฆแฌแแ แ แจแแแซแแแแ แฌแแแแแแฎแแ แแแแแแกแฃแ แแ
แแฅแแ แแแแแ แแฆแแแแจแแ, แ แแ แแแจแแ, แ แแชแ แแแแแแ แแ แแแแแแ, แ แแแแ แแชแแ IO, แแแแแ แแแแแ แแแแแแแแ แแก แแแแแแก แกแแจแฃแแแแแแ, แแแแฅแแแก แงแแแแ แแแแแ แฉแแแ แแแแแ แแแแแ แแ แแแ แแแฃแ แฃแแ แฃแแแแแงแแคแแจแ แแ แแแแจแ แแ แกแแแฃแแ แงแแแแ แแแแแแแแ แกแฃแคแแแ.
แแแแ แ แแคแแฅแขแแ แแ แแแแแแฃแแก แแแแแกแ แแแแแแ แแฅแแก. แแก แแ แแก แซแแแแแ แซแแแแ แ แแ แแแแแแ แแแแ แแ: แงแแแแ แแแแแแ แแฎแแ แชแแแแแแก แแ แแกแ แแ แแแแแ แแแขแแ แคแแแกแก. แฉแแแ แแแกแแฃแแ แแแ แจแแแแแ แกแแ แแแแแแแแ:
- แแ ea แแ แแก แแแแแแแ แแจแแแ, แ แแแแแแช แแแ แฃแแแแก a แขแแแแก แแแแจแแแแแแแแก แแ แแงแแแแแก e แขแแแแก แแแแแแแแแแกแก. แแ แแแแแแแก แฅแชแแแ แซแแแแแ แฐแแแแก แแแแแ แแขแแฃแ แแแแแจแ แแแแแแแแแแกแแแแก แแแแฃแจแแแแแแก: แจแแชแแแแแแแก แแแคแแฅแกแแ แแแ แแ แแแแแชแแแ แจแแกแแซแแแแแแแ. แแแแแแ แ แแแแกแฎแแแแแแ แแกแแ, แ แแ แแแแแแ แแแแแแแแ แแแแแแฃแ แแ แแ แแก แแแแแ แแแแ แฐแแกแแแแแก แกแขแแแแแ แขแฃแ แแแแแแแแแแแจแ, แฎแแแ แแแแแ แแขแแฃแแ แแแแแ แฉแแแฃแแแแ แแ แแงแแแแแแ แแแแ แแชแแฃแแ แกแแกแขแแแแก แแแฅแแแแแแแแก.
- แแแแแแแ แแแแ sa แแ แแก แแแแแแแแ, แ แแแแแแช แแแ แฃแแแแก a แขแแแแก แแแแจแแแแแแแแก แแ แแฅแแก แฌแแแแแ s แขแแแแก แชแแแแแแแแ แแแแแแแ แแแแแแ.
- แจแแกแแซแแแ แ. แจแแกแแซแแแ แแแแแแ แแแแแฎแแขแแแก แแแแแแแแแก, แ แแแแแแช แจแแแซแแแแ แแแแแกแแแแ แแ แแก แจแแฌแงแแแก แแ แแคแ แแก แแแแ แฃแแแแแ. แแฃแแชแ, แฉแแแ แแแกแแฃแแ แแแ MonadPlus แแแแกแแก แแแแฎแแ แชแแแแแแแแ Maybe แขแแแแกแแแแก, แ แแแแแแช แแแแแฎแแขแแแก แกแแแแ แแกแแแ แ แแคแแฅแขแก: แแก แแ แแก แแแแแแแแ, แ แแแแแแช แแแแแกแแแแ แแ แแก แจแแแซแแแแ แจแแฌแงแแแก แแแแแ แแขแฃแแ แแแแจแแแแแแแแก แแแแ แฃแแแแแ.
แแแแแ แแแแแก แแแแฎแแ แชแแแแแแ
แฉแแแ แแแแฅแแก แแแแแชแแแแ แแ แ แขแแแ, Graph a แแ Bigraph ab, แ แแแแแแแแแ แแแ แแแแ แฌแแ แแแแแแแแก แแ แแคแแแแแก แฌแแแ แแแแแ, แ แแแแแแแช แแแแแจแแฃแแแ a แขแแแแก แแแแจแแแแแแแแแแ, แฎแแแ แแแแ แ แฌแแ แแแแแแแแก แแ แแฎแ แแ แแ แแคแแแแแก แแแ แชแฎแแแ แแฎแแ แแก แฌแแแ แแแแแ, แ แแแแแแแช แแขแแแแขแแ แแแฃแแแ a แแ แแแ แฏแแแแ แขแแแแก แแแแจแแแแแแแแแแ. - แแแแ แแแแ แฌแแแ แแแแ, แ แแแแแแแช แแขแแแแขแแ แแแฃแแแ b แขแแแแก แแแแจแแแแแแแแแแ.
แแก แแ แแ แแก แขแแแแแ แแแแแก แแแแแแแแแแแแแ. แแแแแก แแ แแฅแแก แฌแแ แแแแแแแ แแ แแแแแแ แแฃแแ แแ แแฎแ แแแ แแ แแคแแแแแแกแแแแก. แแ แแแแแแแแ แแกแแแ แขแแแแแ แกแแชแฎแแแแกแแแแก.
แฉแแแ แแกแแแ แแแแแญแแ แแแแ แแแแฎแแแ แ แคแฃแแฅแชแแแแ แจแแแแแแ แฎแแแแแฌแแ แแแแ:
-- ะกะฟะธัะพะบ ัะพัะตะดะตะน ะดะฐะฝะฝะพะน ะฒะตััะธะฝั.
neighbours :: Ord a => a -> Graph a -> [a]
-- ะะพัััะพะธัั ะดะฒัะดะพะปัะฝัะน ะณัะฐั ะฟะพ ะณัะฐัั ะธ ััะฝะบัะธะธ, ะดะปั ะบะฐะถะดะพะน ะฒะตััะธะฝั
-- ะฒัะดะฐััะตะน ะตั ะดะพะปั ะธ ะฟะพะผะตัะบั ะฒ ะฝะพะฒะพะน ะดะพะปะต, ะธะณะฝะพัะธััั ะบะพะฝัะปะธะบัะฝัะต ััะฑัะฐ.
toBipartiteWith :: (Ord a, Ord b, Ord c) => (a -> Either b c)
-> Graph a
-> Bigraph b c
-- ะกะฟะธัะพะบ ะฒะตััะธะฝ ะฒ ะณัะฐัะต
vertexList :: Ord a => Graph a -> [a]
ะกะธะณะฝะฐัััะฐ ััะฝะบัะธะธ, ะบะพัะพััั ะผั ะฑัะดะตะผ ะฟะธัะฐัั, ะฒัะณะปัะดะธั ัะฐะบ:
type OddCycle a = [a]
detectParts :: Ord a => Graph a -> Either (OddCycle a) (Bigraph a a)
แแแแแแ แแแกแแฎแแแแ แแ, แ แแ แแฃ แแแ แแแแ แกแแฆแ แแแก แซแแแแแก แแ แแก แแฆแแแแแฉแแแแ แแแแคแแแฅแขแฃแ แ แแฆแแแ แ, แแแแขแ แชแแแแ แแแแก แ แแแฃแ แกแแแก แกแขแแแแก แแแแแ. แแแ แแแแ, แแแก แแฆแกแแแแแแแ, แฉแแแ แฃแแแ แแแแฌแงแแแขแแ แงแแแแแคแแ แ แ แแแฃแ แกแแฃแแ แแแกแขแแแแ แแแแ แฌแแแ แแแแ แแแ แแแ แแแฉแแแแแแ.
แฉแแแ แแแฎแแ แชแแแแแแ แกแแฆแ แแแก แแแ แแแ แซแแแแแก แแแแแแฃแแ แฌแแแ แแกแแแแก แฌแแแ แแแแ แแแแก แแกแแชแแแชแแฃแ แ แแแกแแแแก แจแแแแ แฉแฃแแแแแ. แ แแแฃแ แกแแฃแแ แกแขแแแ แแแขแแแแขแฃแ แแ แจแแแแ แฉแฃแแแแแ แฉแแแ แแแแ แแ แฉแแฃแแ แแแแแแแก Functor แแแแกแแก แแแแฎแแ แชแแแแแแแก แแแแ: แฉแแแ แแฎแแแแ แแแแแญแแ แแแแ แงแแแแ แฌแแแ แแก แฉแแกแแ แแแแแแแแแ แ แแแฃแ แกแแฃแแ แคแฃแแฅแชแแแแแ แแแแ แฃแแแแฃแ แจแแแแแจแ.
แฉแแแ แแแ แแแแ แแแแ แแงแ แแแแแแแงแแแแแแแ แแ แแแแแแ, แ แแแแแแช, แ แแแแ แช แฉแแแก, แแฎแแ แชแแแแแแก แแฃแกแขแแ แแ แแคแแฅแขแแแก, แ แแช แฉแแแ แแแญแแ แแแแ. แแแ แแแแ แแแแฎแแ แชแแแแแแ, แ แแแแแแช แแแแฌแแ แ, แซแแแแแ แแฎแแแก แแงแ แแ แแแ แแแแขแแแ. แกแแแแแแแแแแจแ, แแ แแฅแแแแ แฎแฃแแ แแแแกแฎแแแแแแฃแแ แแแแฎแแ แชแแแแแแ แแ แ แแแแแแขแจแ แแ แกแแแแแแแ แแแแแแฌแงแแแขแ แแแแ แแแ.
แแแ แแแ แ แแแจแ, แฉแแแ แฃแแแ แจแแแแแแ แฉแฃแแแ แแฅแชแแแแแก แแแแแขแแคแแแแขแแ แแแแก แแกแแชแแแชแแฃแ แ แแแกแแแ - แแก แแ แแก แ แแฆแแช แกแแฎแแแแฌแแคแแก แจแแกแแฎแแ. แแแแ แแช, แฉแแแ แฃแแแ แจแแแซแแแ แจแแฉแแ แแแ แแแแคแแแฅแขแแก แแฆแแแฉแแแแกแแก. แแก แจแแแซแแแแ แแงแแก แแ Monad-แแกแแแแก, แแ MonadPlus แจแแกแแซแแแ. แแแแแแ แ แแแแกแฎแแแแแแ แแกแแ, แ แแ แแ แจแแแซแแแแ แแแแแ แฃแแแก แแแแจแแแแแแแ, แแฃ แแแแแแแ แแจแแแ แแ แจแแฉแแ แแ แแ แจแแกแแซแแแ แแ แจแแแแฎแแแแแจแ แแฎแแแแ แแแแก แจแแกแแฎแแ แแแ แฃแแแแก แแแคแแ แแแชแแแก. แแแแแแแแ แฉแแแ แแ แแแญแแ แแแแ แชแแแแ แแแแจแแแแแแแ แฌแแ แแแขแแแแกแแแแก (แแก แฃแแแ แแแแฎแแแ State-แจแ), แแแ แฉแแแ แจแแกแแซแแแ. แแ แแ แแแแแแขแจแ, แ แแแแกแแช แฉแแแ แฃแแแ แแแแแแ แแแแแแ แแ แ แแแแแแแก แแคแแฅแขแ, แแกแแแ แแแแแแแแ
แ แแขแแ แแแแ แฉแแ แแกแแแ แ แแฃแแ แขแแแ? แแ แ แแแแแแ. แฏแแ แแ แแ, แแแแฎแแ แชแแแแแแ แซแแแแแ แฐแแแแก แแแแแ แแขแแแก. แแแแ แแช, แฉแแแ แแแญแแ แแแแ แแแแแแฃแแแ แแแ แแแแ แฃแแแแแก แแแแจแแแแแแแแ แแแแคแแแฅแขแแก แจแแแแฎแแแแแจแ, แ แแแแกแแช แแแแแ แฃแแแแแแ แแแแขแ แแแ แงแฃแแแก แแฆแกแแแแแแแ, แ แแช แแแแ แแ แฃแคแ แ แแแแแแแ Maybe แแแแแแแจแ.
แแแ แแแแ, แฉแแแ แแแฆแแแ แแ แแแแฎแแ แชแแแแแแแก.
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE ScopedTypeVariables #-}
data Part = LeftPart | RightPart
otherPart :: Part -> Part
otherPart LeftPart = RightPart
otherPart RightPart = LeftPart
type PartMap a = Map.Map a Part
type OddCycle a = [a]
toEither :: Ord a => PartMap a -> a -> Either a a
toEither m v = case fromJust (v `Map.lookup` m) of
LeftPart -> Left v
RightPart -> Right v
type PartMonad a = MaybeT (State (PartMap a)) [a]
detectParts :: forall a. Ord a => Graph a -> Either (OddCycle a) (Bigraph a a)
detectParts g = case runState (runMaybeT dfs) Map.empty of
(Just c, _) -> Left $ oddCycle c
(Nothing, m) -> Right $ toBipartiteWith (toEither m) g
where
inVertex :: Part -> a -> PartMonad a
inVertex p v = ((:) v) <$> do modify $ Map.insert v p
let q = otherPart p
msum [ onEdge q u | u <- neigbours v g ]
{-# INLINE onEdge #-}
onEdge :: Part -> a -> PartMonad a
onEdge p v = do m <- get
case v `Map.lookup` m of
Nothing -> inVertex p v
Just q -> do guard (q /= p)
return [v]
processVertex :: a -> PartMonad a
processVertex v = do m <- get
guard (v `Map.notMember` m)
inVertex LeftPart v
dfs :: PartMonad a
dfs = msum [ processVertex v | v <- vertexList g ]
oddCycle :: [a] -> [a]
oddCycle c = tail (dropWhile ((/=) last c) c)
แกแแแแช แแแแแ แแ แแก แแแแแ แแแแแก แแแ แแแ. แจแแแแชแแแแ แแแแฎแกแแแ แ แ แฎแแแแ แแแก แจแแแแแ.
- inVertex แแ แแก แกแแฆแ แแ-แแแ แแแแ แซแแแแแก แแแฌแแแ, แกแแแแช แแแ แแแแแ แแแฌแแแแแ แฌแแแ แแก. แแฅ แฉแแแ แแแแแแแญแแแ แแแแแแ แแแแก แแแแแ แก แฌแแแ แแแ แแ แแแฌแแ แแแแแ onEdge-แก แงแแแแ แแแแแแแแแ. แแฅ แแกแแแ แแฆแแแแแแแ แแแ แแก แกแขแแแก: แแฃ msum แแแแแ แฃแแแแก แแแแจแแแแแแแแก, แฉแแแ แแแงแแแแแ v vertex-แก แแฅ.
- onEdge แแ แแก แแแฌแแแ, แกแแแแช แฉแแแ แแแฌแแแแแ แแฆแแแ แก. แแแก แแ แฏแแ แแซแแฎแแแ แแแแแแฃแ แแแแแแ. แแฅ แฉแแแ แแแแแฌแแแแ, แแ แแก แแฃ แแ แ แแแแแฎแฃแแแแฃแแ แฌแแแ แ แแแแ แ แแฎแแ แแก, แแ แแแกแขแฃแแ แแ แแแก, แแฃ แแ แ. แแฃ แแแแแฎแฃแแแแฃแแแ, แฉแแแ แแแแแฌแแแแ แแ แแก แแฃ แแ แ แแฆแแแ แ แแแแคแแแฅแขแฃแ แ. แแฃ แแก แแกแแ, แฉแแแ แแแแ แฃแแแแ แแแแจแแแแแแแแก - แ แแแฃแ แกแแแก แกแขแแแแก แแแแ แแแฌแแแก, แกแแแแช แงแแแแ แกแฎแแ แฌแแแ แ แแแแแแแกแแแแ แแแแ แฃแแแแแกแแแแแแ.
- processVertex แแแแฌแแแแก แแแแแแฃแแ แฌแแแ แแกแแแแก, แแงแ แแฃ แแ แ แแแกแ แแแแแฎแฃแแแแ แแ แแฌแแ แแแแแก แแแกแแ inVertex, แแฃ แแ แ.
- dfs แแฌแแ แแแแแก processVertex-แก แงแแแแ แฌแแแ แแแ.
แแก แงแแแแแคแแ แ.
แกแแขแงแแ INLINE แแกแขแแ แแ
แกแแขแงแแ INLINE แแ แแงแ แแแแแ แแแแแก แแแ แแแ แแแแฎแแ แชแแแแแแแจแ; แแก แแแแแแแแแแแ แแแแแฉแแแ. แ แแแแกแแช แแชแแแแแแแ แฃแแแแแกแ แแแแแแแแแขแแชแแแก แแแแแแก, แแฆแแแแแฉแแแ, แ แแ แแ แ INLINE แแแ แกแแ แแแแแแ แ แแ แแคแแแแ แจแแกแแแฉแแแแแ แแแแ แแงแ. แแแแก แแแแแแแแกแฌแแแแแแ, แ แแ แกแแแแแขแแแฃแ แแ แคแฃแแฅแชแแแแ แแ แแแแแ แแ แฃแแแ แแฃแจแแแแแแแ, แแแแ แซแแแแแ แแแแแแแแ แแ. แแแแแ แฃแคแ แ แฃแชแแแฃแ แ, แกแฎแแ แแแแ แแขแแ GHC-แแก แแแแกแฎแแแแแแฃแแ แแแ แกแแแ, แจแแกแแแฉแแแแ แแแแกแฎแแแแแแ แแ แแงแ.
GHC Core-แแก แแแแแแแแแแ แแ แแ แแแแ แแก แแแขแแ แแแแก แจแแแแแ, แแ แจแแแซแแแ แแ แแแแแแแก แแแแแญแ แ แแจแแแ แ INLINE-แแก แแ แแ แฎแแแแ. แ แแฆแแช แแแแแแขแจแ GHC 8.4.4 แแ GHC 8.6.5 แจแแ แแก แแแขแแแแแแขแแ แแ แจแแฌแงแแแขแ แแแแก แแแแแแแแ แแแแแกแแแแแ.
แแ แแแแแแ, แ แแ แฐแแกแแแแแก แแ แแแ แแแแ แแแแจแ แแกแแ แญแฃแญแงแก แจแแแฎแแแแแแแ. แแฃแแชแ, แแฆแแกแแช, แแแขแแแแแแขแแ แแแ แฎแแแแแฎแแ แฃแจแแแแแ แจแแชแแแแแแก แแ แฉแแแแ แแแแชแแแแ แแแแชแแ แแแ แแแแแจแแแแแแ. แแแแแแแแแ, แแฅ แฉแแแ แแแชแแ, แ แแ แคแฃแแฅแชแแ แฃแแแ แแงแแก แฉแแกแแฃแแ, แ แแแแแ แแก แฉแแ แแฃแแแ แแแแแ แแขแแฃแ แแแ แกแแแจแ แแ แแก แแ แแก แแแแแแ, แ แแ แจแแแแแแแแแก แแแแชแแ แแแแแจแแแแ.
แฒ แ แแแฎแแ แจแแแแแ?
แจแแแแแ แฐแแแแ แแคแข-แแแ แแแก แแแแแ แแแแ แกแฎแแ แแแแแแแแแแ แแ แแแ แแแแแแฎแแ แชแแแแ แแ แแแแ แแ แแแ แแแ แแแกแ แฃแแแ.
Google Summer of Code-แแก แฌแงแแแแแแ, แจแแแแซแแแ แแ แแฅแขแแแฃแแ แแแแแชแแแแแแ แคแฃแแฅแชแแแแแแฃแ แแ แแแ แแแแ แแแแจแ, แ แแช แแแแแฎแแแ แ แแ แแแแ แขแ แกแขแแแแ แแแแก แแแแแ แฏแแแแแก แฅแฃแฉแแแ แแแแแแแแ แแแคแฎแฃแแจแ (แแแ แฌแแฃแแแแฃแแ แแ แแแ แ แแแแแแแ แชแแแแแแแ แแก แแแแแแ Habr-แแก แแชแแแแ แแฃแแแขแแ แแแจแแช แแ, แแแแ แแ แแก แแ แ-แแ แแแ. แแ แ แแแแแแแแแแแ, แกแแแแช แจแแแแซแแแแ แแแคแฎแฃแแจแ แฉแแแ แแแ แคแฃแแฅแชแแฃแ แแ แแแ แแแแ แแแแจแ), แแแแ แแ แแกแแแ แแแแแชแแ แแ แแแ แแแแแแแก แแ แแฅแขแแแแจแ แแแแแงแแแแแแก แแจแแแแแแ แ แกแแแงแแ แ, แ แแแแแแช แแแแจแแแแแแแแแ แแแแกแฎแแแแแแแ แขแ แแแแชแแฃแ แแแแแจแ แฉแแแ แแแแแชแแแแแแแกแแแ.
แฌแงแแ แ: www.habr.com