
Ertugrul Soeylemez wrote:
What I refer to as a 'computation' in the article is actually just a value of type 'Monad m => m a'. I have chosen that term, because you can apply it to any monad I've seen. As mentioned in section 5, you can think of 'Just 3' as being a computation, which results in 3. But it's important that this is not a function, but just an independent value.
Thanks. I think the article would benefit from making the meaning of computation clearer. The word computation appears in the tutorial 51 times before section 5. That means that when I tried to go back for a definition of computation I couldn't find one. The first place you use the word computation is in the preamble, but that's not a good place to define terms. The second time you use the word computation is in section 2 "Motivation". This might be a good place to define the term. The Motivation section already defines several terms (referentially transparent, purely functional, etc), so it seems like a good place to define computation as well. In section 2 we can't say "Monad => m a" or "Just 3" because the terms are not introduced yet. Perhaps you could say something like this: <idea> The word 'computation' here is not a technical term. I use it to refer to something that returns a value without taking in any parameters. For example (m a) is a computation that takes no parameters but returns a value of type 'a' whereas (a -> b) is a function that takes a parameter of type 'a' and returns a value of type 'b'. It is important that a computation is not a function, but an independent value. </idea> I think that adding that as the third paragraph in the Motivation section would be helpful. In addition, in the Preamble, when you use the word computation, I would add "(see next section)". Question: Would it be reasonable to say that a computation is a wrapper? I'm not sure, because I don't know if a computation always results in the *same* value (you know, side-effects). I know that "Just 3" always results in 3, but is that universal? Cheers, Daniel.