<prompt> Tengeneza kitendakazi cha Haskell ambacho huchukua orodha ya nakala zinazowakilisha kingo kwenye grafu na kurudisha orodha ya nodi zilizopangwa kitopolojia.  <response>: Ili kuunda kazi ya aina ya kitolojia katika Haskell, tunaweza kutumia hatua zifuatazo:1. Unda kazi ya msaidizi ili kupata nodes zote kwenye grafu.2. Unda kazi ya msaidizi ili kuhesabu kingo zinazoingia kwa kila nodi.3. Tekeleza kazi kuu ya upangaji wa kitopolojia kwa kutumia algoriti ya Kahn.Hapa kuna nambari ya kazi hizi:haskellingiza Data.List futa-- Tafuta nodi zote kwenye grafuNodi zote :: Amri a a, a - aallNodes edges folda x, y acc - x : y : acc kingo-- Hesabu kingo zinazoingia kwa kila nodizinazoingiaEdges :: Eq a a - a, a - IntincomingEdges nodi edges urefu kichujio nodi . snd kingo- Aina ya kitopolojia kwa kutumia algoriti ya KahntopologicalAina :: Ordi a a, a - Labda atopologicalPanga kingo go kingo za nodi wapi nodi kingo zote za Nodi noIncomingEdges chujio n - incomingEdges n edges 0 nodi go sorted Imepangwa tu go _ _ Hakuna -- Grafu ina mzunguko kwenda kupangwa n:ns es let newEs chujio n . fst es newNs kama null newEs basi ns kichujio kingine m - incomingEdges m newEs 0 ns in go iliyopangwa n newNs delete n ns newEsSasa unaweza kutumia chaguo za kukokotoa za topologicalSort kupata orodha iliyopangwa kitopolojia ya nodi kutoka kwa orodha fulani ya nakala zinazowakilisha kingo katika grafu. Kwa mfano:haskellkuu :: IO kuu kufanya let graph a, b, a, c, b, d, c, d chapisha topologicalPanga grafuHii itatoa:abcd tu 