GSoC 2019: เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดจเดธเดฟเดจเตเด‚ เดฎเต‹เดฃเดพเดกเต เดŸเตเดฐเดพเตปเดธเตเดซเต‹เตผเดฎเดฑเตเด•เตพเด•เตเด•เตเดฎเดพเดฏเดฟ เด—เตเดฐเดพเดซเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

เด•เดดเดฟเดžเตเดž เดตเต‡เดจเตฝเด•เตเด•เดพเดฒเดคเตเดคเต เดžเดพเตป เดชเด™เตเด•เต†เดŸเตเดคเตเดคเต Google เดธเดฎเตเดฎเตผ เด•เต‹เดกเต - เด—เต‚เด—เดฟเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเด•เตพเด•เตเด•เตเดณเตเดณ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚. เดŽเดฒเตเดฒเดพ เดตเตผเดทเดตเตเด‚, เดธเด‚เด˜เดพเดŸเด•เตผ เดจเดฟเดฐเดตเดงเดฟ เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดชเตเดฐเต‹เดœเด•เตเดŸเตเด•เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเต, เด…เดคเตเดคเดฐเด‚ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เด“เตผเด—เดจเตˆเดธเต‡เดทเดจเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด‰เตพเดชเตเดชเต†เดŸเต† Boost.org ะธ เดฒเดฟเดจเด•เตเดธเต เดซ .เดฃเตเดŸเต‡เดทเตป. เดˆ เดชเตเดฐเต‹เดœเด•เตเดŸเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดฒเต‹เด•เดฎเต†เดฎเตเดชเดพเดŸเตเดฎเตเดณเตเดณ เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเด•เดณเต† Google เด•เตเดทเดฃเดฟเด•เตเด•เตเดจเตเดจเต. 

เด—เต‚เด—เดฟเตพ เดธเดฎเตเดฎเตผ เด“เดซเต เด•เต‹เดกเต 2019-เตฝ เด’เดฐเต เดชเด™เตเด•เดพเดณเดฟ เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ เดžเดพเตป เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เด’เดฐเต เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดšเต†เดฏเตเดคเต เด…เตฝเด—เดพ เดธเด‚เด˜เดŸเดจเดฏเตเดฎเดพเดฏเดฟ Haskell.org, เดนเดพเดธเตเด•เต†เตฝ เดญเดพเดท เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต - เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดถเดธเตเดคเดฎเดพเดฏ เดซเด‚เด—เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเด•เดณเดฟเตฝ เด’เดจเตเดจเต. เด†เตฝเด— เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดพเดฃเต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏเดฟ เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดฏเตเด• เดนเดพเดธเตเด•เต†เดฒเตเดฒเดฟเดฒเต† เด—เตเดฐเดพเดซเตเด•เดณเตเดŸเต† เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเด‚. เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เตป เดธเต†เดฎเดพเดจเตเดฑเดฟเด•เต - เด•เต‹เดกเต เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดธเต†เดฎเดพเตปเตเดฑเดฟเด•เต เดŸเตเดฐเต€เด•เดณเตเด‚ เด•เต‹เดณเตเด•เดณเตเด‚ เดกเดฟเดชเตปเดกเตปเดธเดฟ เด—เตเดฐเดพเดซเตเด•เดณเตเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด—เดฟเดคเตเดคเดฌเต เดฒเตˆเดฌเตเดฐเดฑเดฟ เด…เดต เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเด‚. เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดฑเตเดฑเต เด—เตเดฐเดพเดซเตเด•เตพเด•เตเด•เตเด‚ เด† เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เตพเด•เตเด•เตเด‚ เด’เดฐเต เดŸเตˆเดชเตเดชเต-เดธเต‡เดซเต เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต เดŽเตปเตเดฑเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต. 

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ เดžเดพเตป เดนเดธเตเด•เต†เดฒเตเดฒเดฟเดฒเต† เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดจเดธเดฟเดจเดพเดฏเดฟ เด’เดฐเต เด—เตเดฐเดพเดซเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚. เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดเดฑเตเดฑเดตเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏ เด’เดจเตเดจเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚, เด…เดคเต เด’เดฐเต เดซเด™เตเดทเดฃเตฝ เดถเตˆเดฒเดฟเดฏเดฟเตฝ เดฎเดจเต‹เดนเดฐเดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดŽเดจเดฟเด•เตเด•เต เดจเดฟเดฐเดตเดงเดฟ เด†เดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดŽเดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เดœเต‹เดฒเดฟเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเดฟเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดฎเต‹เดฃเดพเดกเต เดŸเตเดฐเดพเตปเดธเตเดซเต‹เตผเดฎเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดจเดŸเดชเตเดชเดพเด•เตเด•เดฒเดฟเตฝ เดžเดพเตป เดธเตเดฅเดฟเดฐเดคเดพเดฎเดธเดฎเดพเด•เตเด•เดฟ. 

GSoC 2019: เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดจเดธเดฟเดจเตเด‚ เดฎเต‹เดฃเดพเดกเต เดŸเตเดฐเดพเตปเดธเตเดซเต‹เตผเดฎเดฑเตเด•เตพเด•เตเด•เตเดฎเดพเดฏเดฟ เด—เตเดฐเดพเดซเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต

เดŽเดจเตเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต

เดŽเตปเตเดฑเต† เดชเต‡เดฐเต เดตเดพเดธเดฟเดฒเดฟ เด…เตฝเดซเต†เดฑเต‹เดตเต, เดžเดพเตป เดธเต†เตปเตเดฑเต เดชเต€เดฑเตเดฑเต‡เดดเตโ€Œเดธเตเดฌเตผเด—เต เดŽเดšเตเดšเตเดŽเดธเตเด‡เดฏเดฟเดฒเต† เดจเดพเดฒเดพเด‚ เดตเตผเดท เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเดฏเดพเดฃเต. เดจเต‡เดฐเดคเตเดคเต† เดฌเตเดฒเต‹เด—เดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเตเดจเตเดจเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดšเต†เดฏเตเดค เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดŽเตปเตเดฑเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต ะธ เดธเต‚เดฐเดฟเดนเดพเด•เตเด•เดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฏเดพเดคเตเดฐเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต. เด‡เดชเตเดชเต‹เตพ เดžเดพเตป เด‡เตปเตเดฑเต‡เตบเดทเดฟเดชเตเดชเดฟเดฒเดพเดฃเต เดฌเต†เตผเด—เตป เดธเตผเดตเด•เดฒเดพเดถเดพเดฒ เดจเต‹เตผเดตเต‡เดฏเดฟเตฝ, เด…เดตเดฟเดŸเต† เดžเดพเตป เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดธเดฎเต€เดชเดจเด™เตเด™เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดฒเดฟเดธเตเดฑเตเดฑเต เด•เดณเดฑเดฟเด‚เด—เต. เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตˆเดธเตเดกเต เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เดณเตเด‚ เดซเด™เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เตเด‚ เดŽเตปเตเดฑเต† เดคเดพเตฝเดชเตเดชเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต.

เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต

เดฎเตเตปเดตเดพเดšเด•เด‚

เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเตฝ เดชเด™เตเด•เต†เดŸเตเด•เตเด•เตเดจเตเดจ เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเด•เดณเต† เดฌเตเดฒเต‹เด—เต เดšเต†เดฏเตเดฏเดพเตป เดถเด•เตเดคเดฎเดพเดฏเดฟ เดชเตเดฐเต‹เดคเตเดธเดพเดนเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดตเตผ เดŽเดจเดฟเด•เตเด•เต เดฌเตเดฒเต‹เด—เดฟเดจเต เด’เดฐเต เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เดจเตฝเด•เดฟ เดนเดธเตเด•เต†เดฒเดฟเตปเตเดฑเต† เดตเต‡เดจเตฝเด•เตเด•เดพเดฒเด‚. เดˆ เดฒเต‡เด–เดจเด‚ เด’เดฐเต เดตเดฟเดตเตผเดคเตเดคเดจเดฎเดพเดฃเต เดฒเต‡เด–เดจเด™เตเด™เตพ, เดžเดพเตป เด…เดตเดฟเดŸเต† เดœเต‚เดฒเตˆเดฏเดฟเตฝ เด‡เด‚เด—เตเดฒเต€เดทเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดคเต, เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด†เดฎเตเด–เดคเตเดคเต‹เดŸเต†. 

เดธเด‚เดถเดฏเดพเดธเตโ€Œเดชเดฆเดฎเดพเดฏ เด•เต‹เดกเตเดณเตเดณ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ เด‡เดตเดฟเดŸเต†.

เดŽเตปเตเดฑเต† เดœเต‹เดฒเดฟเดฏเตเดŸเต† เดซเดฒเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ (เด‡เด‚เด—เตเดฒเต€เดทเดฟเตฝ) เด‡เดตเดฟเดŸเต†.

เดˆ เดชเต‹เดธเตเดฑเตเดฑเต เดซเด‚เด—เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเดฒเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เด†เดถเดฏเด™เตเด™เตพ เดตเดพเดฏเดจเด•เตเด•เดพเดฐเดจเต† เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เด‰เดฆเตเดฆเต‡เดถเดฟเดšเตเดšเตเดณเตเดณเดคเดพเดฃเต, เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚ เดธเดฎเดฏเด‚ เดตเดฐเตเดฎเตเดชเต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดš เดŽเดฒเตเดฒเดพ เดชเดฆเด™เตเด™เดณเตเด‚ เดžเดพเตป เด“เตผเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด‚.

เดฆเตเดตเดฟเด•เด•เตเดทเดฟเดคเตเดตเดคเตเดคเดฟเดจเดพเดฏเดฟ เด—เตเดฐเดพเดซเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต 

เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดจเดธเดฟเดจเดพเดฏเดฟ เด’เดฐเต เด—เตเดฐเดพเดซเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด…เตฝเด—เดฐเดฟเดคเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เด•เต‹เดดเตเดธเดฟเตฝ เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เด—เตเดฐเดพเดซเต เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เดณเดฟเดฒเตŠเดจเตเดจเดพเดฏเดฟ เดจเตฝเด•เตเด‚. เด…เดฆเตเดฆเต‡เดนเดคเตเดคเดฟเตปเตเดฑเต† เด†เดถเดฏเด‚ เดจเต‡เดฐเดพเดฏเดคเดพเดฃเต: เด†เดฆเตเดฏเด‚ เดžเด™เตเด™เตพ เดŽเด™เตเด™เดจเต†เดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เด‡เดŸเดคเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเดฒเดคเต เดชเด™เตเด•เดฟเดŸเดฒเดฟเตฝ เดฒเด‚เดฌเด™เตเด™เตพ เด‡เดŸเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดตเตˆเดฐเตเดฆเตเดงเตเดฏเดฎเตเดณเตเดณ เด…เด—เตเดฐเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดฎเตเดชเต‹เตพ, เด—เตเดฐเดพเดซเต เดฆเตเดตเดฟเด•เด•เตเดทเดฟเดฏเดฒเตเดฒเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด‰เดฑเดชเตเดชเดฟเดšเตเดšเต เดชเดฑเดฏเตเดจเตเดจเต.

เด•เตเดฑเดšเตเดšเตเด•เต‚เดŸเดฟ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ: เด†เดฆเตเดฏเด‚ เดจเดฎเตเดฎเตพ เด‡เดŸเดคเต เดทเต†เดฏเดฑเดฟเตฝ เด•เตเดฑเดšเตเดšเต เดตเต†เตผเดŸเตเดŸเต†เด•เตเดธเต เด‡เดŸเตเด•. เดตเตเดฏเด•เตเดคเดฎเดพเดฏเตเด‚, เดˆ เดถเต€เตผเดทเดคเตเดคเดฟเตปเตเดฑเต† เดŽเดฒเตเดฒเดพ เด…เดฏเตฝเด•เตเด•เดพเดฐเตเด‚ เดตเดฒเดคเต เดฒเต‹เดฌเดฟเตฝ เด•เดฟเดŸเด•เตเด•เดฃเด‚. เด•เต‚เดŸเดพเดคเต†, เดˆ เดถเต€เตผเดทเดคเตเดคเดฟเตปเตเดฑเต† เด…เดฏเตฝเดตเดพเดธเดฟเด•เดณเตเดŸเต† เดŽเดฒเตเดฒเดพ เด…เดฏเตฝเด•เตเด•เดพเดฐเตเด‚ เด‡เดŸเดคเต เดฒเต‹เดฌเดฟเตฝ เด•เดฟเดŸเด•เตเด•เดฃเด‚, เดฎเตเดคเดฒเดพเดฏเดต. เดžเด™เตเด™เตพ เด†เดฐเด‚เดญเดฟเดšเตเดš เดถเต€เตผเดทเด•เดคเตเดคเดฟเตปเตเดฑเต† เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตโ€Œเดค เด˜เดŸเด•เดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เด…เดฏเตฝเด•เตเด•เดพเดฐเต† เดจเดฟเดฏเต‹เด—เดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒเดพเดคเตเดค เดตเต†เตผเดŸเตเดŸเต€เดธเตเด•เตพ เด‰เดณเตเดณเดฟเดŸเดคเตเดคเต‹เดณเด‚ เด•เดพเดฒเด‚ เดžเด™เตเด™เตพ เดตเต†เตผเดŸเตเดŸเดฟเดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดทเต†เดฏเดฑเตเด•เตพ เด…เดธเตˆเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดคเตเดŸเดฐเตเด‚. เด…เดคเดฟเดจเตเดถเต‡เดทเด‚, เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดš เดŽเดฒเตเดฒเดพ เด˜เดŸเด•เด™เตเด™เตพเด•เตเด•เตเดฎเดพเดฏเดฟ เดžเด™เตเด™เตพ เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด†เดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.

เด’เดฐเต‡ เดชเดพเตผเดŸเตเดŸเต€เดทเดจเดฟเตฝ เดตเต€เดดเตเดจเตเดจ เดฒเด‚เดฌเด™เตเด™เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เด’เดฐเต เดŽเดกเตเดœเต เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด—เตเดฐเดพเดซเดฟเตฝ เด’เดฐเต เดตเดฟเดšเดฟเดคเตเดฐ เดšเด•เตเดฐเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณ เด•เดพเดฐเตเดฏเดฎเดฒเตเดฒ, เด‡เดคเต เด’เดฐเต เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดฑเตเดฑเต เด—เตเดฐเดพเดซเดฟเตฝ เดชเดฐเด•เตเด•เต† เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ (เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚) เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฎเตเด•เตเด•เต เดถเดฐเดฟเดฏเดพเดฏ เด’เดฐเต เดชเดพเตผเดŸเตเดŸเต€เดทเตป เด‰เดฃเตเดŸเต, เด…เดคเดพเดฏเดคเต เด—เตเดฐเดพเดซเต เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดฑเตเดฑเต เด†เดฃเต.

เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ, เดˆ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต เดตเต€เดคเดฟ เด†เดฆเตเดฏ เดคเดฟเดฐเดฏเตฝ เด…เดฅเดตเดพ เด†เดดเดคเตเดคเดฟเดฒเตเดณเตเดณ เด†เดฆเตเดฏ เดคเดฟเดฐเดฏเตฝ. เดจเดฟเตผเดฌเดจเตเดงเดฟเดค เดญเดพเดทเด•เดณเดฟเตฝ, เด†เดดเดคเตเดคเดฟเดฒเตเดณเตเดณ เด†เดฆเตเดฏ เดคเดฟเดฐเดฏเตฝ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดฑเตเดฃเตเดŸเต, เด•เดพเดฐเดฃเด‚ เด‡เดคเต เด…เตฝเดชเตเดชเด‚ เดฒเดณเดฟเดคเดตเตเด‚ เด…เดงเดฟเด• เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเด•เตพ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ. เด•เต‚เดŸเตเดคเตฝ เดชเดฐเดฎเตเดชเดฐเดพเด—เดคเดฎเดพเดฏเดคเดฟเดจเดพเตฝ เดกเต†เดชเตเดคเต เดซเดธเตเดฑเตเดฑเต เดธเต†เตผเดšเตเดšเตเด‚ เดžเดพเตป เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต.

เด…เด™เตเด™เดจเต†, เดžเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดธเตเด•เต€เดฎเดฟเตฝ เดŽเดคเตเดคเดฟ. เด†เดดเดคเตเดคเดฟเดฒเตเดณเตเดณ เด†เดฆเตเดฏ เดคเดฟเดฐเดฏเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด—เตเดฐเดพเดซเดฟเตปเตเดฑเต† เดถเต€เตผเดทเด•เด™เตเด™เดณเดฟเดฒเต‚เดŸเต† เดธเดžเตเดšเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดตเดฏเตเด•เตเด•เต เดทเต†เดฏเดฑเตเด•เตพ เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดžเด™เตเด™เตพ เด…เดฐเดฟเด•เดฟเดฒเต‚เดŸเต† เดจเต€เด™เตเด™เตเดฎเตเดชเต‹เตพ เดทเต†เดฏเดฑเดฟเตปเตเดฑเต† เดŽเดฃเตเดฃเด‚ เดฎเดพเดฑเตเดฑเตเดจเตเดจเต. เด‡เดคเดฟเดจเด•เด‚ เด’เดฐเต เดทเต†เดฏเตผ เด…เดธเตˆเตป เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดตเต†เตผเดŸเตเดŸเต†เด•เตโ€Œเดธเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดทเต†เดฏเตผ เด…เดธเตˆเตป เดšเต†เดฏเตเดฏเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด—เตเดฐเดพเดซเต เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดฑเตเดฑเต เด…เดฒเตเดฒเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏเดฟ เดชเดฑเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚. เดŽเดฒเตเดฒเดพ เดตเต†เตผเดŸเตเดŸเต€เดธเตเด•เตพเด•เตเด•เตเด‚ เด’เดฐเต เดทเต†เดฏเตผ เดจเตฝเด•เตเด•เดฏเตเด‚ เดŽเดฒเตเดฒเดพ เด…เดฐเดฟเด•เตเด•เดณเตเด‚ เดจเต‹เด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดค เดจเดฟเดฎเดฟเดทเด‚, เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดจเดฒเตเดฒ เดชเดพเตผเดŸเตเดŸเต€เดทเตป เด‰เดฃเตเดŸเต.

เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเตเดŸเต† เดถเตเดฆเตเดงเดฟ

เดŽเดฒเตเดฒเดพ เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเตเด‚ เด‰เดฃเตเดŸเต†เดจเตเดจเต เดนเดธเตเด•เต†เดฒเดฟเตฝ เดžเด™เตเด™เตพ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต เดถเตเดฆเตเดงเดฎเดพเดฏ. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดคเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เด…เด™เตเด™เดจเต†เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดธเตเด•เตเดฐเต€เดจเดฟเตฝ เด’เดจเตเดจเตเด‚ เดชเตเดฐเดฟเตปเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฎเดพเตผเด—เดตเตเดฎเดฟเดฒเตเดฒ. เดŽเดฒเตเดฒเดพเด‚, เดตเตƒเดคเตเดคเดฟเดฏเดพเด•เตเด•เตเด• เด•เดฃเด•เตเด•เตเด•เตพ เดตเดณเดฐเต† เด…เดฒเดธเดฎเดพเดฏเดคเดฟเดจเดพเตฝ เด’เดจเตเดจเตเดฎเดฟเดฒเตเดฒ เดถเตเดฆเตเดงเดฎเดพเดฏ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดพเดฐเดฃเด™เตเด™เตพ. เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเตฝ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเตเด‚ เดŽเด™เตเด™เดจเต†เดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดฟเตผเดฌเดจเตเดงเดฟเดคเดฎเดพเดฃเต "เด…เดถเตเดฆเตเดงเด‚" เดฎเตŠเดฃเดพเดกเต IO.

เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฎเดพเตผเด—เดฎเดพเดฃเต เดฎเตŠเดฃเดพเดกเตเด•เตพ เด‡เดซเด•เตเดฑเตเดฑเตเด•เตพ เดนเดพเดธเตเด•เต†เดฒเดฟเตฝ. เด…เดต เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตปเตเดฑเต† เดชเดฐเดฟเดงเดฟเด•เตเด•เดชเตเดชเตเดฑเดฎเดพเดฃเต. เดจเดฒเตเดฒเดคเตเด‚ เดตเตเดฏเด•เตเดคเดตเตเดฎเดพเดฏ เด’เดฐเต เดตเดฟเดตเดฐเดฃเด‚ เด‡เด‚เด—เตเดฒเต€เดทเดฟเตฝ เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ เด‡เดตเดฟเดŸเต†.

IO เดชเต‹เดฒเตเดณเตเดณ เดšเดฟเดฒ เดฎเตŠเดฃเดพเดกเตเด•เตพ เด•เด‚เดชเตˆเดฒเตผ เดฎเดพเดœเดฟเด•เตเด•เดฟเดฒเต‚เดŸเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฏเต†เดฒเตเดฒเดพเด‚ เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเดฑเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเตเด‚ เด…เดตเดฏเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเตเด‚ เดถเตเดฆเตเดงเดฎเดพเดฃเต†เดจเตเดจเตเด‚ เดžเดพเตป เด‡เดตเดฟเดŸเต† เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เดงเดพเดฐเดพเดณเด‚ เด‡เดซเด•เตเดฑเตเดฑเตเด•เตพ เด‰เดฃเตเดŸเต, เด“เดฐเต‹เดจเตเดจเดฟเดจเตเด‚ เด…เดคเดฟเตปเตเดฑเต‡เดคเดพเดฏ เดฎเต‹เดฃเดพเดกเต เด‰เดฃเตเดŸเต. เด‡เดคเต เดตเดณเดฐเต† เดถเด•เตเดคเดตเตเด‚ เดฎเดจเต‹เดนเดฐเดตเตเดฎเดพเดฏ เด’เดฐเต เดธเดฟเดฆเตเดงเดพเดจเตเดคเดฎเดพเดฃเต: เดŽเดฒเตเดฒเดพ เดฎเตŠเดฃเดพเดกเตเด•เดณเตเด‚ เด’เดฐเต‡ เด‡เตปเตเดฑเตผเดซเต‡เดธเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฎเต‚เดจเตเดจเต เดฎเตŠเดฃเดพเดกเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚:

  • เด’เดจเตเดจเตเด•เดฟเตฝ ea เดŽเดจเตเดจเดคเต เดŸเตˆเดชเตเดชเต a เดฏเตเดŸเต† เดฎเต‚เดฒเตเดฏเด‚ เดจเตฝเด•เตเดจเตเดจเดคเต‹ e เดคเดฐเดคเตเดคเดฟเตปเตเดฑเต† เด’เดฐเต เด…เดชเดตเดพเดฆเด‚ เดจเตฝเด•เตเดจเตเดจเดคเต‹ เด†เดฏ เด’เดฐเต เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเดพเดฃเต. เดˆ เดฎเตŠเดฃเดพเดกเดฟเตปเตเดฑเต† เดชเต†เดฐเตเดฎเดพเดฑเตเดฑเด‚ เดจเดฟเตผเดฌเดจเตเดงเดฟเดค เดญเดพเดทเด•เดณเดฟเดฒเต† เด’เดดเดฟเดตเดพเด•เตเด•เดฒเตเด•เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเดฎเดพเดฏเดฟ เดตเดณเดฐเต† เดธเดพเดฎเตเดฏเดฎเตเดณเตเดณเดคเดพเดฃเต: เดชเดฟเดถเด•เตเด•เตพ เดชเดฟเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด•เดฏเต‹ เด•เตˆเดฎเดพเดฑเตเด•เดฏเต‹ เดšเต†เดฏเตเดฏเดพเด‚. เดชเตเดฐเดงเดพเดจ เดตเตเดฏเดคเตเดฏเดพเดธเด‚, เดนเดพเดธเตเด•เต†เดฒเดฟเดฒเต† เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เดฎเตŠเดฃเดพเดกเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต, เด…เดคเต‡เดธเดฎเดฏเด‚ เดจเดฟเตผเดฌเดจเตเดงเดฟเดค เดญเดพเดทเด•เตพ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.
  • เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเต sa เดŽเดจเตเดจเดคเต เดŸเตˆเดชเตเดชเต เดŽเดฏเตเดŸเต† เดฎเต‚เดฒเตเดฏเด‚ เดจเตฝเด•เตเดจเตเดจ เด’เดฐเต เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† s-เตปเตเดฑเต† เดฎเดพเดฑเตเดฑเดพเดตเตเดจเตเดจ เด…เดตเดธเตเดฅเดฏเดฟเดฒเต‡เด•เตเด•เต เด†เด•เตโ€Œเดธเดธเต เด‰เดฃเตเดŸเต.
  • เด’เดฐเตเดชเด•เตเดทเต‡ เดŽ. เดจเดคเตเดคเดฟเด‚เด—เต เดฑเดฟเดŸเตเดŸเต‡เตบ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดŽเดชเตเดชเต‹เตพ เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เดคเดŸเดธเตเดธเดชเตเดชเต†เดŸเดพเดตเตเดจเตเดจ เด’เดฐเต เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเตฝ เดฎเต†เดฏเตเดฌเดฟ เดฎเต‹เดฃเดพเดกเต เดชเตเดฐเด•เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด’เดฐเตเดชเด•เตเดทเต‡ เดคเดฐเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ MonadPlus เด•เตเดฒเดพเดธเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚, เด…เดคเต เดตเดฟเดชเดฐเต€เดค เดซเดฒเด‚ เดชเตเดฐเด•เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต: เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดฎเต‚เดฒเตเดฏเด‚ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดฟเด•เตเด•เตŠเดฃเตเดŸเต เดŽเดชเตเดชเต‹เตพ เดตเต‡เดฃเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เดคเดŸเดธเตเดธเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดตเตเดจเตเดจ เด’เดฐเต เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเดพเดฃเต เด‡เดคเต.

เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ

เดžเด™เตเด™เตพเด•เตเด•เต เดฐเดฃเตเดŸเต เดกเดพเดฑเตเดฑ เดคเดฐเด™เตเด™เดณเตเดฃเตเดŸเต, เด—เตเดฐเดพเดซเต เดŽ, เดฌเดฟเด—เตเดฐเดพเดซเต เดŽเดฌเดฟ, เด…เดตเดฏเดฟเตฝ เด†เดฆเตเดฏเดคเตเดคเต‡เดคเต เดŸเตˆเดชเตเดชเต เดŽ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดณเตเดณ เดฒเด‚เดฌเด™เตเด™เดณเตเดณเตเดณ เด—เตเดฐเดพเดซเตเด•เดณเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต‡เดคเต เดŸเตˆเดชเตเดชเต เดŽ, เดตเดฒเดคเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฒเต‡เดฌเตฝ เดšเต†เดฏเตเดค เด‡เดŸเดคเต เดตเดถเดคเตเดคเตเดณเตเดณ เดตเต†เตผเดŸเตเดŸเดฟเดธเตเด•เดณเตเดณเตเดณ เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดฑเตเดฑเต เด—เตเดฐเดพเดซเตเด•เดณเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต. - เดคเดฐเด‚ เดฌเดฟ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฒเต‡เดฌเตฝ เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเตˆเดกเต เดตเต†เตผเดŸเตเดŸเดฟเดธเตเด•เตพ.

เด‡เดต เด†เตฝเด— เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดคเดฐเด™เตเด™เดณเดฒเตเดฒ. เดกเดฏเดฑเด•เตโ€ŒเดŸเต เดšเต†เดฏเตเดฏเดพเดคเตเดค เดฌเตˆเดชเดพเตผเดŸเตเดŸเตˆเดฑเตเดฑเต เด—เตเดฐเดพเดซเตเด•เตพเด•เตเด•เต เด†เตฝเด—เดฏเตเด•เตเด•เต เด’เดฐเต เดชเตเดฐเดพเดคเดฟเดจเดฟเดงเตเดฏเด‚ เด‡เดฒเตเดฒ. เดตเตเดฏเด•เตเดคเดคเดฏเตเด•เตเด•เดพเดฏเดฟ เดžเดพเตป เด‡เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดคเดฐเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเด•เตเด•เดฟ.

เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด’เดชเตเดชเตเด•เดณเตเดณเตเดณ เดธเดนเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฃเต:

-- ะกะฟะธัะพะบ ัะพัะตะดะตะน ะดะฐะฝะฝะพะน ะฒะตั€ัˆะธะฝั‹.
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)

เดกเต†เดชเตเดคเต-เด†เดฆเตเดฏเดคเตเดคเต† เดคเดฟเดฐเดšเตเดšเดฟเดฒเดฟเดจเดฟเดŸเต† เดžเด™เตเด™เตพ เดตเตˆเดฐเตเดฆเตเดงเตเดฏเดฎเตเดณเตเดณ เด’เดฐเต เดŽเดกเตเดœเต เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดพเตฝ, เดตเดฟเดšเดฟเดคเตเดฐเดฎเดพเดฏ เดธเตˆเด•เตเด•เดฟเตพ เดฑเดฟเด•เตเด•เตผเดทเตป เดธเตเดฑเตเดฑเดพเด•เตเด•เดฟเดจเต เดฎเตเด•เดณเดฟเดฒเดพเดฃเต†เดจเตเดจเต เด•เดพเดฃเดพเตป เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต. เด…เด™เตเด™เดจเต†, เด…เดคเต เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดฑเดฟเด•เตเด•เตผเดทเตป เดธเตเดฑเตเดฑเดพเด•เตเด•เต เดฎเตเดคเตฝ เด…เดตเดธเดพเดจเดคเตเดคเต† เดถเต€เตผเดทเดคเตเดคเดฟเตปเตเดฑเต† เด†เดฆเตเดฏ เดธเด‚เดญเดตเด‚ เดตเดฐเต†เดฏเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เด•เดพเดฐเตเดฏเด™เตเด™เดณเตเด‚ เดžเด™เตเด™เตพ เดฎเตเดฑเดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เด“เดฐเต‹ เดถเต€เตผเดทเด•เดคเตเดคเดฟเดจเตเด‚ เดทเต†เดฏเตผ เดจเดฎเตเดชเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เด…เดจเตเดฌเดจเตเดง เดถเตเดฐเต‡เดฃเดฟ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเดฟเด•เตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เด†เดดเดคเตเดคเดฟเดฒเตเดณเตเดณ เด†เดฆเตเดฏ เดคเดฟเดฐเดฏเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เดžเด™เตเด™เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เดฎเตŠเดฃเดพเดกเดฟเตปเตเดฑเต† เดซเด™เตโ€Œเดฑเตเดฑเตผ เด•เตเดฒเดพเดธเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เด†เดตเตผเดคเตเดคเดจ เดธเตเดฑเตเดฑเดพเด•เตเด•เต เดธเตเดตเดฏเดฎเต‡เดต เดชเดฐเดฟเดชเดพเดฒเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚: เด†เดตเตผเดคเตเดคเดจ เดซเด‚เด—เตโ€Œเดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดŸเด™เตเด™เดฟเดฏเต†เดคเตเดคเดฟเดฏ เดซเดฒเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเดพเดคเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดตเต†เตผเดŸเตเดŸเต€เดธเตเด•เดณเตเด‚ เด‡เดŸเตเดŸเดพเตฝ เดฎเดคเดฟเดฏเดพเด•เตเด‚.

เด’เดจเตเดจเตเด•เดฟเตฝ เดฎเตŠเดฃเดพเดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต เดŽเตปเตเดฑเต† เด†เดฆเตเดฏ เด†เดถเดฏเด‚, เด…เดคเต เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เด‡เดซเด•เตเดฑเตเดฑเตเด•เตพ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดพเดฏเดฟ เดคเต‹เดจเตเดจเตเดจเตเดจเต. เดžเดพเตป เดŽเดดเตเดคเดฟเดฏ เด†เดฆเตเดฏ เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เดˆ เด“เดชเตเดทเดจเตเดฎเดพเดฏเดฟ เดตเดณเดฐเต† เด…เดŸเตเดคเตเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดŽเดจเดฟเด•เตเด•เต เด’เดฐเต เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เด…เดžเตเดšเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดจเดฟเตผเดตเตเดตเดนเดฃเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด’เดŸเตเดตเดฟเตฝ เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเตฝ เดธเตเดฅเดฟเดฐเดคเดพเดฎเดธเดฎเดพเด•เตเด•เดฟ.

เด†เดฆเตเดฏเด‚, เดจเดฎเตเดฎเตพ เดทเต†เดฏเตผ เดเดกเตปเตเดฑเดฟเดซเดฏเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เด…เดจเตเดฌเดจเตเดง เดถเตเดฐเต‡เดฃเดฟ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต - เด‡เดคเต เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด•เดพเดฐเตเดฏเดฎเดพเดฃเต. เดฐเดฃเตเดŸเดพเดฎเดคเดพเดฏเดฟ, เด’เดฐเต เดตเตˆเดฐเตเดฆเตเดงเตเดฏเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดฎเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เดจเดฟเตผเดคเตเดคเดพเตป เด•เดดเดฟเดฏเดฃเด‚. เด‡เดคเต เด’เดจเตเดจเตเด•เดฟเตฝ เดฎเตŠเดฃเดพเดกเต เด†เด•เดพเด‚, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเตเดชเด•เตเดทเต‡ เดŽเดจเตเดจเดคเดฟเดจเต MonadPlus เด†เด•เดพเด‚. เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเตฝ เดจเดฟเตผเดคเตเดคเดฟเดฏเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดจเตเดจเตเด•เดฟเตฝ เด’เดฐเต เดฎเต‚เดฒเตเดฏเด‚ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดพเดฎเต†เดจเตเดจเดคเดพเดฃเต เดชเตเดฐเดงเดพเดจ เดตเตเดฏเดคเตเดฏเดพเดธเด‚, เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เดจเตฝเด•เต‚. เดตเดฟเดœเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฎเต‚เดฒเตเดฏเด‚ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒเดพเดคเตเดคเดคเดฟเดจเดพเตฝ (เด‡เดคเต เด‡เดคเดฟเดจเด•เด‚ เดธเด‚เดธเตเดฅเดพเดจเดคเตเดคเต เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต), เดžเด™เตเด™เตพ เด’เดฐเตเดชเด•เตเดทเต‡ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเต. เดฐเดฃเตเดŸเต เดฎเตŠเดฃเดพเดกเตเด•เดณเตเดŸเต† เดซเดฒเด™เตเด™เตพ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เต‡เดฃเตเดŸ เดจเดฟเดฎเดฟเดทเดคเตเดคเดฟเตฝ, เด…เดต เดชเตเดฑเดคเตเดคเตเดตเดฐเตเดจเตเดจเต เดฎเตŠเดฃเดพเดกเต เดŸเตเดฐเดพเตปเดธเตเดซเต‹เตผเดฎเดฑเตเด•เตพ, เดˆ เด‡เดซเด•เตเดฑเตเดฑเตเด•เตพ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต.

เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดžเดพเตป เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดธเด™เตเด•เต€เตผเดฃเตเดฃ เดคเดฐเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเดคเต? เดฐเดฃเตเดŸเต เด•เดพเดฐเดฃเด™เตเด™เตพ. เด’เดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เด…เดจเดฟเดตเดพเดฐเตเดฏเดคเดฏเตเดฎเดพเดฏเดฟ เดตเดณเดฐเต† เดธเดพเดฎเตเดฏเดฎเตเดณเตเดณเดคเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต. เดฐเดฃเตเดŸเดพเดฎเดคเดพเดฏเดฟ, เดตเดฟเดšเดฟเดคเตเดฐเดฎเดพเดฏ เดฒเต‚เดชเตเดชเต เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด†เดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดฟเดฐเดฟเด•เต† เดตเดฐเตเดฎเตเดชเต‹เตพ เดตเตˆเดฐเตเดฆเตเดงเตเดฏเดฎเตเดฃเตเดŸเดพเดฏเดพเตฝ เดฑเดฟเดŸเตเดŸเต‡เตบ เดฎเต‚เดฒเตเดฏเด‚ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด‡เดคเต เด’เดฐเตเดชเด•เตเดทเต‡ เดฎเตŠเดฃเดพเดกเดฟเตฝ เดšเต†เดฏเตเดฏเดพเตป เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต.

เด…เด™เตเด™เดจเต† เดจเดฎเตเด•เตเด•เต เดˆ เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต.

{-# 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 เด…เดฎเตผเดคเตเดคเตเดจเตเดจเต.
  • เดจเดฎเตเดฎเตพ เดŽเดกเตเดœเต เดธเดจเตเดฆเตผเดถเดฟเด•เตเด•เตเดจเตเดจ เดญเดพเด—เดฎเดพเดฃเต onEdge. เด“เดฐเต‹ เด…เดฐเดฟเด•เดฟเดฒเตเด‚ เด‡เดคเต เดฐเดฃเตเดŸเตเดคเดตเดฃ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต. เดฎเดฑเตเดตเดถเดคเตเดคเตเดณเตเดณ เดถเต€เตผเดทเด•เด‚ เดธเดจเตเดฆเตผเดถเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹ เดŽเดจเตเดจเต เดžเด™เตเด™เตพ เด‡เดตเดฟเดŸเต† เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเต เดธเดจเตเดฆเตผเดถเดฟเด•เตเด•เตเด•. เดธเดจเตเดฆเตผเดถเดฟเดšเตเดšเดพเตฝ, เดŽเดกเตเดœเต เดตเตˆเดฐเตเดฆเตเดงเตเดฏเดฎเดพเดฃเต‹ เดŽเดจเตเดจเต เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต. เด…เด™เตเด™เดจเต†เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดฎเต‚เดฒเตเดฏเด‚ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจเต - เดฑเดฟเด•เตเด•เตผเดทเตป เดธเตเดฑเตเดฑเดพเด•เตเด•เดฟเตปเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เดฎเตเด•เตพเดญเดพเด—เด‚, เด…เดตเดฟเดŸเต† เดฎเดฑเตเดฑเต†เดฒเตเดฒเดพ เดฒเด‚เดฌเด™เตเด™เดณเตเด‚ เดคเดฟเดฐเดฟเด•เต† เดตเดฐเตเดฎเตเดชเต‹เตพ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด‚.
  • processVertex เด“เดฐเต‹ เดถเต€เตผเดทเด•เดตเตเด‚ เดธเดจเตเดฆเตผเดถเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹ เดŽเดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเดฟเตฝ inVertex เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
  • dfs เดŽเดฒเตเดฒเดพ เดตเต†เตผเดŸเตเดŸเต€เดธเตเด•เดณเดฟเดฒเตเด‚ processVertex เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดคเตเดฐเดฏเต‡เดฏเตเดณเตเดณเต‚.

INLINE เดŽเดจเตเดจ เดตเดพเด•เตเด•เดฟเตปเตเดฑเต† เดšเดฐเดฟเดคเตเดฐเด‚

INLINE เดŽเดจเตเดจ เดตเดพเด•เตเด•เต เด…เตฝเด—เต‹เดฐเดฟเดคเดคเตเดคเดฟเตปเตเดฑเต† เด†เดฆเตเดฏ เดชเตเดฐเดฏเต‹เด—เดคเตเดคเดฟเตฝ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดฒเตเดฒ; เด…เดคเต เดชเดฟเดจเตเดจเต€เดŸเต เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต. เด’เดฐเต เดฎเดฟเด•เดšเตเดš เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เดžเดพเตป เดถเตเดฐเดฎเดฟเดšเตเดšเดชเตเดชเต‹เตพ, เดšเดฟเดฒ เด—เตเดฐเดพเดซเตเด•เดณเดฟเตฝ เดจเต‹เตบ-INLINE เดชเดคเดฟเดชเตเดชเต เดตเดณเดฐเต† เดฎเดจเตเดฆเด—เดคเดฟเดฏเดฟเดฒเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟ. เด…เตผเดคเตเดฅเดชเดฐเดฎเดพเดฏเดฟ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เตพ เด’เดฐเต‡เดชเต‹เดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดฃเด‚ เดŽเดจเตเดจเดคเดฟเดจเดพเตฝ, เด‡เดคเต เดŽเดจเตเดจเต† เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เด†เดถเตเดšเดฐเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดฟ. เด…เดชเดฐเดฟเดšเดฟเดคเตป เดชเต‹เดฒเตเด‚, GHC เดฏเตเดŸเต† เดฎเดฑเตเดฑเตŠเดฐเต เดชเดคเดฟเดชเตเดชเตเดณเตเดณ เดฎเดฑเตเดฑเตŠเดฐเต เดฎเต†เดทเต€เดจเดฟเตฝ เดถเตเดฐเดฆเตเดงเต‡เดฏเดฎเดพเดฏ เดตเตเดฏเดคเตเดฏเดพเดธเดฎเดฟเดฒเตเดฒ.

GHC เด•เต‹เตผ เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เดตเดพเดฏเดฟเดšเตเดšเต เด’เดฐเดพเดดเตเดš เดšเต†เดฒเดตเดดเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚, เดตเตเดฏเด•เตเดคเดฎเดพเดฏ INLINE-เตปเตเดฑเต† เด’เดฐเต เดตเดฐเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเดจเดฟเด•เตเด•เต เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดžเตเดžเต. GHC 8.4.4 เดจเตเด‚ GHC 8.6.5 เดจเตเด‚ เด‡เดŸเดฏเดฟเดฒเตเดณเตเดณ เดšเดฟเดฒ เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเตฝ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเตผ เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดจเดฟเตผเดคเตเดคเดฟ.

เดนเดพเดธเตโ€Œเด•เต†เตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเตฝ เด‡เดคเตเดคเดฐเดฎเตŠเดฐเต เด…เดดเตเด•เตเด•เต เดจเต‡เดฐเดฟเดŸเต‡เดฃเตเดŸเดฟเดตเดฐเตเดฎเต†เดจเตเดจเต เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดšเดฟเดฐเตเดจเตเดจเดฟเดฒเตเดฒ. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดจเตเดจเตเด‚, เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเดฑเตเด•เตพ เดšเดฟเดฒเดชเตเดชเต‹เตพ เดคเต†เดฑเตเดฑเตเด•เตพ เดตเดฐเตเดคเตเดคเตเดจเตเดจเต, เด…เดตเตผเด•เตเด•เต เดธเต‚เดšเดจเด•เตพ เดจเตฝเด•เตเดจเตเดจเดคเต เดžเด™เตเด™เดณเตเดŸเต† เดœเต‹เดฒเดฟเดฏเดพเดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดซเด‚เด—เตเดทเตป เด‡เตปเดฒเตˆเตป เดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดพเด‚, เด•เดพเดฐเดฃเด‚ เด…เดคเต เดจเดฟเตผเดฌเดจเตเดงเดฟเดค เดชเดคเดฟเดชเตเดชเดฟเตฝ เด‡เตปเดฒเตˆเตป เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เด•เด‚เดชเตˆเดฒเดฑเดฟเดจเต เด’เดฐเต เดธเต‚เดšเดจ เดจเตฝเด•เดพเดจเตเดณเตเดณ เด•เดพเดฐเดฃเดฎเดพเดฃเต.

เดชเดฟเดจเตเดจเต€เดŸเต เดŽเดจเตเดคเต เดธเด‚เดญเดตเดฟเดšเตเดšเต?

เดคเตเดŸเตผเดจเตเดจเต เดžเดพเตป เดฎเดฑเตเดฑเต เดฎเตŠเดฃเดพเดกเตเด•เดณเตเดฎเดพเดฏเดฟ เดนเต‹เดชเตโ€Œเด•เตเดฐเต‹เดซเตเดฑเตเดฑเต-เด•เดพเตผเดชเตเดชเต เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟ, เด…เดคเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเตปเตเดฑเต† เด…เดตเดธเดพเดจเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต.

เด—เต‚เด—เดฟเตพ เดธเดฎเตเดฎเตผ เด“เดซเต เด•เต‹เดกเดฟเดจเต เดจเดจเตเดฆเดฟ, เดซเด™เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดชเตเดฐเดพเดฏเต‹เด—เดฟเด• เด…เดจเตเดญเดตเด‚ เดฒเดญเดฟเดšเตเดšเต, เด‡เดคเต เด…เดŸเตเดคเตเดค เดตเต‡เดจเตฝเด•เตเด•เดพเดฒเดคเตเดคเต เดœเต†เดฏเตเตป เดธเตเดŸเตเดฐเต€เดฑเตเดฑเดฟเตฝ เด‡เตปเตเดฑเต‡เตบเดทเดฟเดชเตเดชเต เดจเต‡เดŸเดพเตป เดŽเดจเตเดจเต† เดธเดนเดพเดฏเดฟเดšเตเดšเต (เดนเดฌเดฑเดฟเตปเตเดฑเต† เด…เดฑเดฟเดตเตเดณเตเดณ เดชเตเดฐเต‡เด•เตเดทเด•เตผเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เดชเต‹เดฒเตเด‚ เดˆ เดธเตเดฅเดฒเด‚ เดŽเดคเตเดฐเดคเตเดคเต‹เดณเด‚ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเดคเดพเดฃเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เด‰เดฑเดชเตเดชเดฟเดฒเตเดฒ, เดชเด•เตเดทเต‡ เด‡เดคเต เด’เดจเตเดจเดพเดฃเต เดตเต‡เดจเตฝเด•เตเด•เดพเดฒเดคเตเดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดซเด™เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเตฝ เดเตผเดชเตเดชเต†เดŸเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดšเตเดฐเตเด•เตเด•เด‚ เดšเดฟเดฒเดฐเดฟเตฝ), เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดˆ เดฎเดพเดคเตƒเด• เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตปเตเดฑเต† เด…เดคเตเดญเตเดคเด•เดฐเดฎเดพเดฏ เดฒเต‹เด•เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดŽเดจเตเดจเต† เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต, เดชเดฐเดฎเตเดชเดฐเดพเด—เดค เดญเดพเดทเด•เดณเดฟเดฒเต† เดŽเตปเตเดฑเต† เด…เดจเตเดญเดตเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดณเดฐเต† เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•