Ja, Erlang ska ju vara väldigt funktionellt också av vad jag förstått, så det låter ganska likt Haskell ur det perspektivet. Haskell är nog lite mer strikt (gissar jag på)
Jag är ingen jätteexpert själv, men jag försöker lära mig lite då och då eftersom det är intressant. Någon får rätta mig om jag har fel.
Monader är väl ett matematiskt begrepp som kommer ifrån "category theory", så det är väl inte riktigt att likna med någon särskild funktion i språket. Monader kan man nog skapa i de flesta språk (men Haskell är som klippt och skuret för det i och med sitt avancerade typsystem).
Kort och gott så kan man väl säga att det är en funktion som man skapar (men det finns många färdiga monader också).
Denna funktion har ett gäng egenskaper (och krav) som gör den väldigt kraftfull. Den gör att du kan föra samman komplexa datastrukturer på ett häftigt sätt. Den kan t.ex. beskriva hur du för samman musikstycken, människor, ordrar, tåg eller whatever.
Ska man dra det mer extremt och förenklat så skulle det väl vara möjligt att göra beräkningar i stil med:
x = Tåg * Musikstycke + Människa / Order
En sådan beräkning ser ganska bisarr ut. Vad fan betyder ens "Tåg multiplicerat med musikstycke"? Hur kan ett tåg multipliceras med musik? Men det är min uppfattning att kategoriteorin behandlar sådant, och det blir monadens uppgift att reda ut det. Detta var ett bisarrt exempel med mening, men det 'är bara för att framhäva poängen med vad jag menar med att "föra samman komplexa datastrukturer"
Men det enda en nybörjare behöver veta är väl typ att en monad är vad man använder för att kapsla in sidoeffekter. Det gör att dina program förmodligen aldrig någonsin kommer att råka ut för ett runtime exception.
Men monader har många fler egenskaper, men det är ganska svårt att förklara allt i en mening. Denna videon tycker jag är bäst, och det förklaras väldigt tydlig, och är riktad till folk utan bakgrund i Haskell. Ta dig en titt på den så förstår du nog varför det är svårt (särskilt för nybörjare) att förklara över en öl:
https://youtu.be/ZhuHCtR3xq8
Och detta är inte allt. Vill man verkligen förstå det så behöver man plugga "category theory", då kan den här serien nog vara användbar
https://www.youtube.com/playlist?lis...t6gyZJZZAPoQ6v
Men det är overkill, precis som det nämns i det första klippet jag länkade tidigare.
Men som sagt, det brukar vara räcka att säga typ "Monader är bra
delvis för att de kapslar in sidoeffekter, och det är ett krav i Haskell eftersom sidoeffekter inte tillåts. Det gör ditt program säkert, deterministiskt och korrekt". Det är nog förklaringen man bör satsa på när man ska förklara över en öl