GSoC 2019: āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧāĻ¤āĻž āĻāĻŦāĻ‚ āĻŽā§‹āĻ¨āĻžāĻĄ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻ°āĻŽāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ—ā§āĻ°āĻžāĻĢ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻ—āĻ¤ āĻ—ā§āĻ°ā§€āĻˇā§āĻŽā§‡ āĻ†āĻŽāĻŋ āĻ…āĻ‚āĻļ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ—ā§āĻ—āĻ˛ āĻ¸āĻžāĻŽāĻžāĻ° āĻ•ā§‹āĻĄ - Google āĻāĻ° āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ°ā§āĻĨā§€āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋ āĻŦāĻ›āĻ°, āĻ†āĻ¯āĻŧā§‹āĻœāĻ•āĻ°āĻž āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¸ā§āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ—ā§āĻ˛āĻŋ āĻĨā§‡āĻ•ā§‡ Boost.org и āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻĢāĻžāĻ‰āĻ¨ā§āĻĄā§‡āĻļāĻ¨. Google āĻāĻ‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ°āĻž āĻŦāĻŋāĻļā§āĻŦā§‡āĻ° āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ°ā§āĻĨā§€āĻĻā§‡āĻ° āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻœāĻžāĻ¨āĻžāĻ¯āĻŧāĨ¤ 

Google Summer of Code 2019-āĻ āĻāĻ•āĻœāĻ¨ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡, āĻ†āĻŽāĻŋ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻĒāĻžāĻ¨āĻž āĻ¸āĻ‚āĻ—āĻ āĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ Haskell.org, āĻ¯āĻž āĻšāĻžāĻ¸āĻ•ā§‡āĻ˛ āĻ­āĻžāĻˇāĻž āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āĻ°āĻ›ā§‡ - āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻŦāĻŋāĻ–ā§āĻ¯āĻžāĻ¤ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋāĨ¤ āĻ†āĻ˛āĻ—āĻž āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻ¯āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻ•āĻ°ā§‡ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻŸāĻžāĻ‡āĻĒ āĻ•āĻ°ā§āĻ¨ Haskell āĻŽāĻ§ā§āĻ¯ā§‡ āĻ—ā§āĻ°āĻžāĻĢ āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž. āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻŽāĻ§ā§āĻ¯ā§‡ āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻŋāĻ• — āĻāĻ•āĻŸāĻŋ Github āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻ¯āĻž āĻ•ā§‹āĻĄā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻŋāĻ• āĻ—āĻžāĻ›, āĻ•āĻ˛ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻž āĻ—ā§āĻ°āĻžāĻĢ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻ¸ā§‡āĻ‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧ āĻ—ā§āĻ°āĻžāĻĢ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ‡āĻĒ-āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ›āĻŋāĻ˛āĨ¤ 

āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸā§‡ āĻ†āĻŽāĻŋ āĻšāĻžāĻ¸āĻ•ā§‡āĻ˛ā§‡āĻ° āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧāĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°āĻžāĻĢ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤ āĻ¯āĻĻāĻŋāĻ“ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽāĻŸāĻŋ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻŽā§ŒāĻ˛āĻŋāĻ•, āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻļā§ˆāĻ˛ā§€āĻ¤ā§‡ āĻāĻŸāĻŋāĻ•ā§‡ āĻ¸ā§āĻ¨ā§āĻĻāĻ°āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ†āĻŽāĻžāĻ•ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻŦā§‡āĻļ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ†āĻŽāĻŋ āĻŽā§‹āĻ¨āĻžāĻĄ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻ°āĻŽāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡ āĻ¸ā§āĻĨāĻŋāĻ° āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ 

GSoC 2019: āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧāĻ¤āĻž āĻāĻŦāĻ‚ āĻŽā§‹āĻ¨āĻžāĻĄ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻ°āĻŽāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ—ā§āĻ°āĻžāĻĢ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻ†āĻŽāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡

āĻ†āĻŽāĻžāĻ° āĻ¨āĻžāĻŽ āĻ­ā§āĻ¯āĻžāĻ¸āĻŋāĻ˛āĻŋ āĻ†āĻ˛āĻĢā§‡āĻ°āĻ­, āĻ†āĻŽāĻŋ āĻ¸ā§‡āĻ¨ā§āĻŸ āĻĒāĻŋāĻŸāĻžāĻ°ā§āĻ¸āĻŦāĻžāĻ°ā§āĻ— HSE-āĻāĻ° āĻšāĻ¤ā§āĻ°ā§āĻĨ āĻŦāĻ°ā§āĻˇā§‡āĻ° āĻ›āĻžāĻ¤ā§āĻ°āĨ¤ āĻ†āĻ—ā§‡ āĻŦā§āĻ˛āĻ—ā§‡ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°āĻžāĻ‡āĻœāĻĄ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ и āĻœā§āĻ°āĻŋāĻšā§āĻ¯āĻžāĻ• āĻ­ā§āĻ°āĻŽāĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡. āĻāĻ‡ āĻŽā§āĻšā§‚āĻ°ā§āĻ¤ā§‡ āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°ā§āĻ¨āĻļāĻŋāĻĒā§‡ āĻ†āĻ›āĻŋ āĻŦāĻžāĻ°ā§āĻ—ā§‡āĻ¨ āĻŦāĻŋāĻļā§āĻŦāĻŦāĻŋāĻĻā§āĻ¯āĻžāĻ˛āĻ¯āĻŧ āĻ¨āĻ°āĻ“āĻ¯āĻŧā§‡āĻ¤ā§‡, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›āĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ°āĻ™. āĻ†āĻŽāĻžāĻ° āĻ†āĻ—ā§āĻ°āĻšā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°āĻžāĻ‡āĻœāĻĄ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻāĻŦāĻ‚ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤āĨ¤

āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖāĻ•āĻžāĻ°ā§€ āĻ›āĻžāĻ¤ā§āĻ°āĻĻā§‡āĻ° āĻŦā§āĻ˛āĻ—ā§‡ āĻĻā§ƒāĻĸāĻŧāĻ­āĻžāĻŦā§‡ āĻ‰āĻ¤ā§āĻ¸āĻžāĻšāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ°āĻž āĻ†āĻŽāĻžāĻ•ā§‡ āĻŦā§āĻ˛āĻ—ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡ āĻšāĻžāĻ¸ā§āĻ•ā§‡āĻ˛ā§‡āĻ° āĻ—ā§āĻ°ā§€āĻˇā§āĻŽ. āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§, āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻœā§āĻ˛āĻžāĻ‡ āĻŽāĻžāĻ¸ā§‡ āĻ‡āĻ‚āĻ°ā§‡āĻœāĻŋāĻ¤ā§‡ āĻ˛ā§‡āĻ–āĻž, āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āĻ¸āĻšāĨ¤ 

āĻĒā§āĻ°āĻļā§āĻ¨āĻ¯ā§āĻ•ā§āĻ¤ āĻ•ā§‹āĻĄ āĻ¸āĻš āĻĒā§āĻ˛ āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¸ā§āĻŸ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻāĻ–āĻžāĻ¨ā§‡.

āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻŽāĻžāĻ° āĻ•āĻžāĻœā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ (āĻ‡āĻ‚āĻ°ā§‡āĻœāĻŋāĻ¤ā§‡) āĻāĻ–āĻžāĻ¨ā§‡.

āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸāĻŸāĻŋ āĻĒāĻžāĻ āĻ•āĻ•ā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚-āĻāĻ° āĻŽā§ŒāĻ˛āĻŋāĻ• āĻ§āĻžāĻ°āĻŖāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻĻāĻŋāĻ“ āĻ†āĻŽāĻŋ āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ˛ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻĻ āĻ¸ā§āĻŽāĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦāĨ¤

āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧāĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ—ā§āĻ°āĻžāĻĢ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ 

āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧāĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°āĻžāĻĢ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸āĻšāĻœ āĻ—ā§āĻ°āĻžāĻĢ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ•ā§‹āĻ°ā§āĻ¸ā§‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻŸāĻŋ āĻ¸ā§‹āĻœāĻž: āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻŽāĻ°āĻž āĻŦāĻžāĻŽ āĻŦāĻž āĻĄāĻžāĻ¨ āĻ­āĻžāĻ—ā§‡ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ°āĻžāĻ–āĻŋ āĻāĻŦāĻ‚ āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ°ā§‹āĻ§āĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻĻāĻžāĻŦāĻŋ āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻ—ā§āĻ°āĻžāĻĢāĻŸāĻŋ āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧ āĻ¨āĻ¯āĻŧāĨ¤

āĻāĻ•āĻŸā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤: āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻŽāĻ°āĻž āĻŦāĻžāĻŽ āĻ­āĻžāĻ—ā§‡ āĻ•āĻŋāĻ›ā§ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ°āĻžāĻ–āĻŋāĨ¤ āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ¤āĻ‡, āĻāĻ‡ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§‡āĻļā§€āĻĻā§‡āĻ° āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻĄāĻžāĻ¨ āĻ˛ā§‹āĻŦā§‡ āĻļā§āĻ¯āĻŧā§‡ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ†āĻ°āĻ“, āĻāĻ‡ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§‡āĻļā§€āĻĻā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§‡āĻļā§€āĻ•ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻŦāĻžāĻŽ āĻ˛ā§‹āĻŦā§‡ āĻļā§āĻ¤ā§‡ āĻšāĻŦā§‡, āĻāĻŦāĻ‚ āĻ¤āĻžāĻ‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ¤ā§‡ āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻž āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻšā§āĻ›āĻŋ āĻ¯āĻ¤āĻ•ā§āĻˇāĻŖ āĻ¨āĻž āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ…āĻ‚āĻļā§‡ āĻāĻ–āĻ¨āĻ“ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻŽāĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡āĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§‡āĻļā§€āĻĻā§‡āĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻŋāĻ¨āĻŋāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ‡ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°āĻŋāĨ¤

āĻāĻ•āĻ‡ āĻĒāĻžāĻ°ā§āĻŸāĻŋāĻļāĻ¨ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¯āĻĻāĻŋ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻĨāĻžāĻ•ā§‡ āĻ¤āĻŦā§‡ āĻ—ā§āĻ°āĻžāĻĢā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻœā§‹āĻĄāĻŧ āĻšāĻ•ā§āĻ° āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ•āĻ āĻŋāĻ¨ āĻ¨āĻ¯āĻŧ, āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧ āĻ—ā§āĻ°āĻžāĻĢā§‡ āĻŦā§āĻ¯āĻžāĻĒāĻ•āĻ­āĻžāĻŦā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ (āĻāĻŦāĻ‚ āĻŦā§‡āĻļ āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ¤āĻ‡) āĻ…āĻ¸āĻŽā§āĻ­āĻŦāĨ¤ āĻ…āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ āĻŋāĻ• āĻĒāĻžāĻ°ā§āĻŸāĻŋāĻļāĻ¨ āĻ†āĻ›ā§‡, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§‡ āĻ—ā§āĻ°āĻžāĻĢāĻŸāĻŋ āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧāĨ¤

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤, āĻāĻ‡ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻĒā§āĻ°āĻ¸ā§āĻĨ āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻŦāĻž āĻ—āĻ­ā§€āĻ°āĻ¤āĻž āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨. āĻ†āĻŦāĻļā§āĻ¯āĻŋāĻ• āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ, āĻ—āĻ­ā§€āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ¸āĻšāĻœ āĻāĻŦāĻ‚ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻĄā§‡āĻŸāĻž āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻ†āĻŽāĻŋ āĻ—āĻ­ā§€āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨āĻ“ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ†āĻ°āĻ“ āĻāĻ¤āĻŋāĻšā§āĻ¯āĻŦāĻžāĻšā§€āĨ¤

āĻāĻ‡āĻ­āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¸ā§āĻ•āĻŋāĻŽā§‡ āĻāĻ¸ā§‡āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ—āĻ­ā§€āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—ā§āĻ°āĻžāĻĢā§‡āĻ° āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ—ā§āĻ˛āĻŋ āĻ…āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§‡āĻ¯āĻŧāĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻŋ, āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻŦāĻ°āĻžāĻŦāĻ° āĻ…āĻ—ā§āĻ°āĻ¸āĻ° āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻ­āĻžāĻ—ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋ āĻ¯āĻžāĻ¤ā§‡ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ— āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻ•āĻ°āĻž āĻ†āĻ›ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻā§‡ āĻŦāĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ āĻ—ā§āĻ°āĻžāĻĢāĻŸāĻŋ āĻĻā§āĻŦāĻŋāĻĒāĻ•ā§āĻˇā§€āĻ¯āĻŧ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¯ā§‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļā§€āĻ°ā§āĻˇāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ— āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤āĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻĒāĻžāĻ°ā§āĻŸāĻŋāĻļāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ—āĻŖāĻ¨āĻžāĻ° āĻŦāĻŋāĻļā§āĻĻā§āĻ§āĻ¤āĻž

āĻšāĻžāĻ¸ā§āĻ•ā§‡āĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻ§āĻ°ā§‡ āĻ¨āĻŋāĻ‡ āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ—āĻŖāĻ¨āĻž āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻ°ā§āĻĻāĻžāĻ¯āĻŧ āĻ•āĻŋāĻ›ā§ āĻŽā§āĻĻā§āĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻ•ā§‹āĻ¨ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻĨāĻžāĻ•āĻŦā§‡ āĻ¨āĻžāĨ¤ āĻŽā§‹āĻŸā§‡āĻ“, āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ—āĻŖāĻ¨āĻž āĻāĻ¤ āĻ…āĻ˛āĻ¸ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻ‡ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻŋāĻ›ā§ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻ•āĻžāĻ°āĻŖāĨ¤ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡ āĻ˜āĻŸāĻŽāĻžāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ—āĻŖāĻ¨āĻž āĻāĻ•āĻ°āĻ•āĻŽ āĻŦāĻžāĻ§ā§āĻ¯ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ "āĻ…āĻļā§āĻĻā§āĻ§" āĻŽā§‹āĻ¨āĻžāĻĄ āĻ†āĻ‡āĻ“

Monads āĻšāĻ˛ āĻ—āĻŖāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻ­āĻžāĻŦ Haskell āĻŽāĻ§ā§āĻ¯ā§‡. āĻ¤āĻžāĻ°āĻž āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¤āĻž āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž āĻ•āĻ°āĻž āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸā§‡āĻ° āĻ¸ā§āĻ¯ā§‹āĻ—ā§‡āĻ° āĻŦāĻžāĻ‡āĻ°ā§‡āĨ¤ āĻ‡āĻ‚āĻ°ā§‡āĻœāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻĒāĻĄāĻŧāĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻ–āĻžāĻ¨ā§‡.

āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯ā§‡ āĻ•āĻŋāĻ›ā§ āĻŽā§‹āĻ¨āĻžāĻĄ, āĻ¯ā§‡āĻŽāĻ¨ IO, āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻŽā§āĻ¯āĻžāĻœāĻŋāĻ•ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ…āĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŦāĻ—ā§āĻ˛āĻŋ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ—āĻŖāĻ¨āĻž āĻŦāĻŋāĻļā§āĻĻā§āĻ§āĨ¤

āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ­āĻžāĻŦ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŽā§‹āĻ¨āĻžāĻĄ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ–ā§āĻŦ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻāĻŦāĻ‚ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻ¤āĻ¤ā§āĻ¤ā§āĻŦ: āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽā§‹āĻ¨āĻžāĻĄ āĻāĻ•āĻ‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻŽā§‹āĻ¨āĻžāĻĄ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦ:

  • āĻšāĻ¯āĻŧ ea āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ—āĻŖāĻ¨āĻž āĻ¯āĻž āĻŸāĻžāĻ‡āĻĒ a-āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻŦāĻž āĻŸāĻžāĻ‡āĻĒ e-āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ¨āĻŋāĻ•ā§āĻˇā§‡āĻĒ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ‡ āĻŽā§‹āĻ¨āĻžāĻĄā§‡āĻ° āĻ†āĻšāĻ°āĻŖ āĻ†āĻŦāĻļā§āĻ¯āĻŋāĻ• āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻžāĻ° āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ: āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻ§āĻ°āĻž āĻŦāĻž āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻšāĻ˛ āĻ¯ā§‡ āĻŽā§‹āĻ¨āĻžāĻĄ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻ¯ā§ŒāĻ•ā§āĻ¤āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻšāĻžāĻ¸āĻ•ā§‡āĻ˛ā§‡āĻ° āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻ–āĻ¨ āĻ…āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻ­āĻžāĻˇāĻžāĻ—ā§āĻ˛āĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤
  • āĻ¸ā§āĻŸā§‡āĻŸ sa āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ—āĻŖāĻ¨āĻž āĻ¯āĻž āĻŸāĻžāĻ‡āĻĒ a-āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ s āĻŸāĻžāĻ‡āĻĒā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°ā§‡āĨ¤
  • āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻāĻ•āĻŸāĻŋ. āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻŽā§‹āĻ¨āĻžāĻĄ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ—āĻŖāĻ¨āĻž āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻ¯ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻŋāĻ›ā§āĻ‡ āĻĢā§‡āĻ°āĻ¤ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻŦāĻžāĻ§āĻžāĻ—ā§āĻ°āĻ¸ā§āĻ¤ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ†āĻŽāĻ°āĻž āĻšāĻ¯āĻŧāĻ¤ā§‹ āĻŽā§‹āĻ¨āĻžāĻĄāĻĒā§āĻ˛āĻžāĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦ, āĻ¯āĻž āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ āĻĒā§āĻ°āĻ­āĻžāĻŦ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡: āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ—āĻŖāĻ¨āĻž āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŽāĻžāĻ¨ āĻĢā§‡āĻ°āĻ¤ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻžāĻ§āĻžāĻ—ā§āĻ°āĻ¸ā§āĻ¤ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĻā§āĻŸāĻŋ āĻĄā§‡āĻŸāĻž āĻŸāĻžāĻ‡āĻĒ āĻ†āĻ›ā§‡, āĻ—ā§āĻ°āĻžāĻĢ 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)

āĻāĻŸāĻŋ āĻĻā§‡āĻ–āĻž āĻ¸āĻšāĻœ āĻ¯ā§‡ āĻ—āĻ­ā§€āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ°ā§‹āĻ§āĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻ‡, āĻ¤āĻŦā§‡ āĻŦāĻŋāĻœā§‹āĻĄāĻŧ āĻšāĻ•ā§āĻ°āĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ‰āĻĒāĻ°ā§‡ āĻĨāĻžāĻ•ā§‡āĨ¤ āĻāĻ‡āĻ­āĻžāĻŦā§‡, āĻāĻŸāĻŋ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻĨā§‡āĻ•ā§‡ āĻļā§‡āĻˇ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ•ā§‡āĻŸā§‡ āĻĢā§‡āĻ˛āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻ¨āĻŽā§āĻŦāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻšāĻ¯ā§‹āĻ—ā§€ āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°ā§‡āĻ–ā§‡ āĻ—āĻ­ā§€āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻŋāĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦā§‡āĻ›ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻŽā§‹āĻ¨āĻžāĻĄā§‡āĻ° āĻĢāĻžāĻ‚āĻ•ā§āĻŸāĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ°āĻŋāĻ•āĻžāĻ°āĻļāĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•āĻŸāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻŦā§‡āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻŦā§‡: āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ°āĻŋāĻ•āĻžāĻ°ā§āĻ¸āĻŋāĻ­ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡ āĻĒāĻžāĻĨ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ†āĻŽāĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ§āĻžāĻ°āĻŖāĻž āĻ›āĻŋāĻ˛ Either monad āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž, āĻ¯āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°ā§‡ āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻšāĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻŋ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻĒā§āĻ°āĻĨāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ‡ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ–ā§āĻŦ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ āĻ›āĻŋāĻ˛āĨ¤ āĻĒā§āĻ°āĻ•ā§ƒāĻ¤āĻĒāĻ•ā§āĻˇā§‡, āĻ†āĻŽāĻŋ āĻāĻ• āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻĒāĻžāĻāĻšāĻŸāĻŋ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻ…āĻŦāĻļā§‡āĻˇā§‡ āĻ…āĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋāĻ¤ā§‡ āĻ¸ā§āĻĨāĻŋāĻ° āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤

āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻļāĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻžāĻ°ā§€āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻšāĻ¯ā§‹āĻ—ā§€ āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡ - āĻāĻŸāĻŋ āĻ°āĻžāĻœā§āĻ¯ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻŋāĻ›ā§āĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻ¤, āĻ•ā§‹āĻ¨ā§‹ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦ āĻļāĻ¨āĻžāĻ•ā§āĻ¤ āĻšāĻ˛ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĨāĻžāĻŽāĻžāĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻŸāĻŋ āĻšāĻ¯āĻŧ āĻŽā§‹āĻ¨āĻžāĻĄ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ…āĻĨāĻŦāĻž āĻŽā§‹āĻ¨āĻžāĻĄāĻĒā§āĻ˛āĻžāĻ¸ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻšāĻ˛ āĻ¯ā§‡ āĻšāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻĢā§‡āĻ°āĻ¤ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¯āĻĻāĻŋ āĻ—āĻŖāĻ¨āĻž āĻŦāĻ¨ā§āĻ§ āĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻŦāĻ‚ āĻšāĻ¯āĻŧāĻ¤ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ˛āĻžāĻĻāĻž āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡ (āĻāĻŸāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ°āĻžāĻœā§āĻ¯ā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ†āĻ›ā§‡), āĻ†āĻŽāĻ°āĻž āĻšāĻ¯āĻŧāĻ¤ā§‹ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ‡āĨ¤ āĻāĻŦāĻ‚ āĻāĻ‡ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§‡ āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĻā§āĻŸāĻŋ āĻŽā§‹āĻ¨āĻžāĻĄā§‡āĻ° āĻĒā§āĻ°āĻ­āĻžāĻŦ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻ¤āĻžāĻ°āĻž āĻŦā§‡āĻ°āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¸ā§‡ āĻŽā§‹āĻ¨āĻžāĻĄ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻ°āĻŽāĻžāĻ°, āĻ¯āĻž āĻāĻ‡ āĻĒā§āĻ°āĻ­āĻžāĻŦāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸ā§āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤

āĻ•ā§‡āĻ¨ āĻ†āĻŽāĻŋ āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻœāĻŸāĻŋāĻ˛ āĻŸāĻžāĻ‡āĻĒ āĻšāĻ¯āĻŧāĻ¨? āĻĻā§āĻŸāĻŋ āĻ•āĻžāĻ°āĻŖāĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ…āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻšāĻ¤ā§‡ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ†āĻ‰āĻŸ. āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻ¤, āĻŦāĻŋāĻœā§‹āĻĄāĻŧ āĻ˛ā§āĻĒ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻĨā§‡āĻ•ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻŋāĻ°ā§‹āĻ§ā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻŽāĻžāĻ¨āĻ•ā§‡ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ¯āĻž āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻŽā§‹āĻ¨āĻžāĻĄā§‡ āĻ•āĻ°āĻž āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻšāĻœāĨ¤

āĻāĻ‡āĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒā§‡āĻ¤ā§‡.

{-# 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 āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ¯āĻŧ, āĻ†āĻŽāĻ°āĻž āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ vertex v āĻĒā§āĻļ āĻ•āĻ°āĻŋāĨ¤
  • onEdge āĻšāĻ˛ āĻ¸ā§‡āĻ‡ āĻ…āĻ‚āĻļ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻŋāĨ¤ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻā§āĻŦāĻžāĻ° āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ…āĻ¨ā§āĻ¯ āĻĻāĻŋāĻ•ā§‡āĻ° āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻŸāĻŋ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¨āĻž āĻšāĻ˛ā§‡ āĻāĻŸāĻŋ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻŋāĨ¤ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻž āĻšāĻ˛ā§‡, āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŸāĻŋ āĻŦāĻŋāĻ°ā§‹āĻ§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻ¤āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻŽāĻžāĻ¨āĻŸāĻŋ āĻĢā§‡āĻ°āĻ¤ āĻĻāĻŋāĻ‡ - āĻ°āĻŋāĻ•āĻžāĻ°āĻļāĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻāĻ•ā§‡āĻŦāĻžāĻ°ā§‡ āĻ‰āĻĒāĻ°ā§‡, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻ¸āĻŦ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ—ā§āĻ˛āĻŋ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤
  • āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ­āĻžāĻ°ā§āĻŸā§‡āĻ•ā§āĻ¸ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻŸā§‡āĻ•ā§āĻ¸ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¨āĻž āĻšāĻ˛ā§‡ āĻāĻŸāĻŋāĻ¤ā§‡ āĻ­āĻžāĻ°ā§āĻŸā§‡āĻ•ā§āĻ¸ āĻšāĻžāĻ˛āĻžāĻ¯āĻŧāĨ¤
  • dfs āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļā§€āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ¤ā§‡ processVertex āĻšāĻžāĻ˛āĻžāĻ¯āĻŧāĨ¤

āĻāĻ–āĻžāĻ¨ā§‡āĻ‡ āĻļā§‡āĻˇ.

INLINE āĻļāĻŦā§āĻĻā§‡āĻ° āĻ‡āĻ¤āĻŋāĻšāĻžāĻ¸

INLINE āĻļāĻŦā§āĻĻāĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽā§‡āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ—ā§‡ āĻ›āĻŋāĻ˛ āĻ¨āĻž; āĻāĻŸāĻŋ āĻĒāĻ°ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¤āĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒā§‡āĻ˛āĻžāĻŽ āĻ¯ā§‡ āĻ…-āĻ‡āĻ¨āĻ˛āĻžāĻ‡āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĻŸāĻŋ āĻ•āĻŋāĻ›ā§ āĻ—ā§āĻ°āĻžāĻĢā§‡ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ§ā§€āĻ° āĻ›āĻŋāĻ˛āĨ¤ āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻ—āĻ¤āĻ­āĻžāĻŦā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻ•āĻ‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§‡, āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻ•ā§‡ āĻŦā§āĻ¯āĻžāĻĒāĻ•āĻ­āĻžāĻŦā§‡ āĻ…āĻŦāĻžāĻ• āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻāĻŽāĻ¨āĻ•āĻŋ āĻ…āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤, GHC āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¸āĻš āĻ…āĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻ›āĻŋāĻ˛ āĻ¨āĻžāĨ¤

GHC āĻ•ā§‹āĻ° āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻ• āĻ¸āĻĒā§āĻ¤āĻžāĻš āĻ…āĻ¤āĻŋāĻŦāĻžāĻšāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻ‡āĻ¨āĻ˛āĻžāĻ‡āĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ˛āĻžāĻ‡āĻ¨ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ GHC 8.4.4 āĻāĻŦāĻ‚ GHC 8.6.5 āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœāĻžāĻ° āĻ¨āĻŋāĻœā§‡ āĻĨā§‡āĻ•ā§‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻž āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻ†āĻŽāĻŋ āĻšāĻžāĻ¸āĻ•ā§‡āĻ˛ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚-āĻ āĻāĻŽāĻ¨ āĻŽāĻ¯āĻŧāĻ˛āĻžāĻ° āĻŽā§āĻ–ā§‹āĻŽā§āĻ–āĻŋ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻ†āĻļāĻž āĻ•āĻ°āĻŋāĻ¨āĻŋāĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ†āĻœāĻ“, āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœāĻžāĻ°āĻ°āĻž āĻŽāĻžāĻā§‡ āĻŽāĻžāĻā§‡ āĻ­ā§āĻ˛ āĻ•āĻ°ā§‡, āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻ‡āĻ™ā§āĻ—āĻŋāĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœāĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻœāĻžāĻ¨āĻŋ āĻ¯ā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻ‡āĻ¨āĻ˛āĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ…āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻ‡āĻ¨āĻ˛āĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ°āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ™ā§āĻ—āĻŋāĻ¤ āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°āĻŖāĨ¤

āĻāĻ°āĻĒāĻ°ā§‡ āĻ•ā§€ āĻšāĻ˛ā§‹?

āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŽāĻ¨āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻšāĻĒāĻ•ā§āĻ°āĻĢāĻŸ-āĻ•āĻžāĻ°ā§āĻĒ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻļā§‡āĻˇ āĻ›āĻŋāĻ˛āĨ¤

āĻ—ā§āĻ—āĻ˛ āĻ¸āĻžāĻŽāĻžāĻ° āĻ…āĻĢ āĻ•ā§‹āĻĄā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻ†āĻŽāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚āĻ¯āĻŧā§‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¯āĻž āĻ†āĻŽāĻžāĻ•ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ—ā§āĻ°ā§€āĻˇā§āĻŽā§‡ āĻœā§‡āĻ¨ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻŸā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°ā§āĻ¨āĻļāĻŋāĻĒ āĻĒā§‡āĻ¤ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°ā§‡āĻ¨āĻŋ (āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ¨āĻ‡ āĻ¯ā§‡ āĻāĻ‡ āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻŸāĻŋ āĻšāĻžāĻŦāĻ°ā§‡āĻ° āĻœā§āĻžāĻžāĻ¨ā§€ āĻĻāĻ°ā§āĻļāĻ•āĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡āĻ“ āĻ•āĻ¤āĻŸāĻž āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚āĻ¯āĻŧā§‡ āĻ¨āĻŋāĻ¯ā§āĻ•ā§āĻ¤ āĻšāĻ¤ā§‡ āĻ—ā§āĻ°ā§€āĻˇā§āĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨), āĻ¤āĻŦā§‡ āĻāĻ‡ āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤āĻŸāĻŋ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻŦāĻŋāĻ¸ā§āĻŽāĻ¯āĻŧāĻ•āĻ° āĻœāĻ—āĻ¤ā§‡āĻ° āĻ¸āĻžāĻĨā§‡āĻ“ āĻ†āĻŽāĻžāĻ•ā§‡ āĻĒāĻ°āĻŋāĻšāĻ¯āĻŧ āĻ•āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡, āĻāĻ¤āĻŋāĻšā§āĻ¯āĻ—āĻ¤ āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ†āĻŽāĻžāĻ° āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž āĻĨā§‡āĻ•ā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻ†āĻ˛āĻžāĻĻāĻžāĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨