Monadi (funktionaalinen ohjelmointi)

Monadi funktionaalisessa ohjelmoinnissa on tietynlainen abstrakti tietotyyppi, joka kuvaa ohjelman suoritusta annetussa kontekstissa (ohjelman tietosisällön sijaan). Monadien avulla voidaan ketjuttaa toimintoja liukuhihnoiksi (pipeline), joissa jokainen toiminto koristellaan muilla suoritussäännöillä, jotka monadi tarjoaa. Funktionaaliseen tapaan kirjoitetut ohjelmat voivat hyödyntää monadeja rakennettaessa proseduureja, jotka sisältävät jonomuotoisia (vastakohtana rinnakkaisille) toimintoja tai määritettäessä mielivaltaisia vuonohjausrakenteita (rinnakkaisuuden hallinta, kontinuaatiot ja poikkeukset).

Muodollisesti monadi luodaan määrittelemällä kaksi operaatiota (bind ja return) sekä tyyppirakentaja M, jonka pitää täyttää joukko vaatimuksia monadisten funktioiden koostamista varten (so. funktiot, jotka käyttävät argumentteinaan monadin sisältämiä arvoja). Return ottaa arvon "tavallisesta" tietotyypistä ja sijoittaa sen monadiseen säilöön tyyppiä M. Bind vuorostaan toimii käänteiseen tapaan lukien "tavallisen" arvon monadista ja välittää sen liukuhihnan seuraavalle funktiolle.

Ohjelmoija koostaa monadisia funktioita määrittäen siten liukuhihnan tietojen prosessointiin. Monadi toimii eräänlaisena sovelluskehyksenä, koska se kuvaa uudelleenkäytettävän toimintamallin joka määrittää liukuhihnassa suoritettavien monadisten funktioiden suoritusjärjestyksen, ottamatta mitään kantaa tietosisältöön tai edes monadisten funktioiden nimiin (riittää, että funktiot ovat sopivaa tyyppiä).

Nimi juontuu matematiikasta, kategoriateoriassa esiintyvästä monadirakenteesta.

Ohjelmointi