Re:From design patterns to category theory
by tome on Saturday October 07, 2017 @06:19PM
(#15426007)
> A list is not a monad
Huh? List is very much a monad.
Re:From design patterns to category theory
by runeks on Sunday October 08, 2017 @10:16AM
(#15428282)
You're completely right. I had no idea.
But I can't make sense of the definition of >>= for the list in Haskell, which is:
xs >>= f = [y | x <- xs, y <- f x]
It seems to imply that I get a list in return when I do xs >>= f, but I need to do the following in order for it to work: [1,2,3] >>= return . (+1)
Re:From design patterns to category theory
by crimsonalucard on Monday October 09, 2017 @02:38PM
(#15436315)
You're probably use to Monads that wrap a single object, like the maybe monad. Monads can wrap multiple objects or anything. This is the case for a list.
A list is not a monad — it’s just a container of values, ie. a functor. A monad is a data structure defines a computation in a specific context, and allows composing these in a sequential manner. For example, the Haskell IO monad is a computational context in which you can do input/output, and all of these IO operations are represented using a data structure of the type “IO <return_value>”.
For example, the function “readLine” has the type “IO String”, and represents a computation that reads a line from standard input and returns it as a string. At runtime, evaluating this value will result in the runtime system asking the user for some input, and at compile-time this is represented as the string (that the user enters at runtime) inside the IO monad.