<div dir="ltr"><div><div>I understand if Adam doesn't want to be the one to deal with newbie questions. Look at the amazing achievement of the Ur/Web compiler - he created that, and the mindset needed to create that is probably quite different than the mindset needed to deal with monadic newbies like me. So I do understand that. I just wish the community were big enough so that there would be someone out there who could give me some pointers on where my code is wrong.<br></div><div><br></div><div>In a situation where the student is actively researching all the available (albeit scarce) literature and examples and proposing a bunch of half-baked solutions himself, then correcting them by offering a tiny but specific suggestion or a hint, perhaps even based on the code he already wrote, can be very helpful pedagogically  - because in this situation, the student is totally immersed in the details of the solutions he has proposed, in relation to the examples he is emulating in the literature, and is really receptive to any new information.</div><div><br></div><div>So a tiny (but specific) push in any direction can be really useful - because it would be highly specific to the actual current understanding of the student, in relation to the specifics of what he's seen, and the specifics of what he's attempted, to where the student's "head" is at, at this point on his path of trying to grasp monadic transactions in Ur/Web. </div><div><br></div><div>When a student is struggling with the syntax for a specific task in a language and actively experimenting by making and submitting different proposed solutions using a variety of syntactical alternatives, and also providing detailed informal rationales of how he thinks a particular approach works, or why he thinks his approach is not working, and asking specific questions about certain details of the approaches he's attempting to use and certain details of the examples in the literature, then that can be a great teaching moment which should not be wasted. </div><div><br></div><div>Just saying "go out and find some book on this general topic in some related language" really wastes a major teaching opportunity to gently nudge the student in the right direction onto the right track at a time when he is highly motivated and totally immersed in the details of this particular issue.</div><div><br></div><div>A mere one-liner could be all that it takes - an English-language pseudo-code version of how to run a transactional SQL SELECT and pass the results on to build an XML fragment. Just saying: "you need to use the `<-` notation" (or you DON'T need to use the `<-` notation - I have no idea, I'm the one who's confused here), "And then you need to do this with the result in order to hand it off to that function..." - this would take less time to say than writing "I haven't read your post".</div><div><br></div><div>One last desperate plea for a shred of information: I do know that when something returns an Option, you have to use a case statement on Some or None to basically "unbox" it to get the non-monadic value out. Option is a monad. Here I'm dealing with a differnent Monad: a Transaction. I understand conceptually that I'm getting a `transaction (list $fs)` but I need a `list $fs`. Is there some way to "unbox" the transaction to get the non-monadic value out of it - the way we "unbox" an Option? </div></div><div><br></div><div>I'm not sure me going back and reading more Haskell monad tutorials is the best approach any more. I've been doing that for about a year, and I have some grasp of monads now. It would not be harmful (in fact it would be highly pedagogical) to see an example of the correct use of a monadic transaction to run some SQL and build some XML from that, as I have been trying to do in my code.</div><div><br></div><div>I think the biggest leap forward in my understanding of monads would occur if I could finally see (or if someone could gently nudge me towards writing myself, based on the erroneous attempts I've made so far and submitted in various threads on this mailing list - eg, the erroneous attempt in the original post in this particular thread), if I could finally see the example of a monadic transaction running some SQL and passing that along to create an XML fragment. </div><div><br></div><div>If someone would just point out what I'm doing wrong, then I would really learn a lot from being corrected that way. </div><div><br></div><div>- Scott</div><div><br></div></div>