News for hackers. Stuff that matters.
Re:Advanced Programming Languages (2009) by Avshalom on Sunday March 06, 2022 @06:51PM (#30582471)
a monad is a type that is basically a structure

  { 
  X:value-that-we-care-about, 
  Y:something-we-only-care-about-occasionally-if-at-all
  }
and then a bunch of functions that let you pretend it's the value X, that's what the compiler is abbreviating for you, all the necessary wrapping/unwrapping or calling members. In the prolog example what we care about is the last/latest value and monads let us just shove the previous value(s) into a hole and forget about it, or at least ignore it until later.

with error monads we don't always care if something failed (like a write) but we probably want to keep that information for later, so it just gets hidden and we can pretend we're just passing around a value (see https://fsharpforfunandprofit.com/rop/ )

I'm not particularly clear on how Haskell does the IO monad, but basically the hidden value is what lets the compiler keep track of what was done pre/post IO, allowing you to thread-the-whole-world through an IO call.

"Do" uses the same trick as that prolog example, by threading previous calculations through a function call you can force

   Do
   Foo1
   Foo2
   Foo3
to be called in that order (important for a lazy language) so you don't have force it by nesting them Foo3 (Foo2(Foo1(X))) can get pretty ugly fast.

There are no comments on this comment yet.