Laning isn ' t what ' s bad about her and jhin isn ' t a bad matchup . <| sep |> Dude , how do you like the new album ? only thing i listen to . <| sep |> No I know , I appreciate it bro , thank you <| sep |> Someone ' s on a high horse today . <| sep |> That ' s not quite true while nonpure languages have little use for say IO or State , there are still useful patterns . For trivial examples , but of the sort that actually come up very often , you can look at everyone ' s favourites Maybe and List $ referrerName $ c ustomergetReferrergetName not safe if a customer has no referrer . Maybe solves this depending on what semantics you actually want $ commissionSales $ c u s t o m e rgetReferralsgetPurchases Won ' t work as getPurchases is a method on Customer a referral but we ' ve got an Iterable of Customer . List monad solves this . Sure , there are syntax issues that make this all a bit more awkward , but that ' s an implementation detail rather than the concept of monads being useless . And sure there are OO ways to solve the above problems null object pattern and composite pattern respectively but why should you have to create a null version of every object that might be nullable , and a composite object for every object that might be returned in a list , when you could write a single generic implementation ?