Re: quasi quotes and Q monad
Tomasz Zielonka <[email protected]> Mon, 2 Jan 2006 18:22:25 +0100
| Newsgroups | gmane.comp.lang.haskell.template |
|---|---|
| Message-ID | <20060102172225.GA5465@lambda> |
On Mon, Jan 02, 2006 at 05:16:36PM +0100, Ch. A. Herrmann wrote: > The value I want to pass for x is of type Exp. Of course, I could turn > this type into (Q Exp) by applying return, but this artificial instance > of the Q monad would come from nowhere, not being connected with the > regular instance used, e.g., for the fresh name generation. It seems that you are a bit confused with monads. The only monad you have here is the Q type constructor. Applying "return" to your value you'll get a Q-action, which can be one of parts used to construct bigger and bigger Q-actions with >>=. It's a usual way of doing things with monads, don't be afraid. Haskell is designed in such a way, that when you're facing a possibility of undefined behaviour, etc, you see some "danger" signs in your code, like uses of unsafePerformIO (unsafe!!!). In all other cases that typechecker should reject badly behaving programs. > Especially, I have the following questions: > * Is there a simple solution to this problem? If so, please tell me and > forget about the following questions. You gave it. > * Is the quasi quote mechanism at all appropriate for what I want to do > or should one better change to the concrete AST representation? That > > would be unfortunate because my aim is to develop Template Haskell > examples which demonstrate ease of use. As long as it works, it should be appropriate. I used it in this way and it was a lot easier than writing those huge, baroque AST representations. After all that's what quasi-quote is for - to make your life easier! > * If return is used to turn an expression into monadic form before > splicing, is it possible that > (a) the consistency of fresh name generation is lost, even if one > does the name generation for the spliced expression oneself, No, everything should be fine. Best regards Tomasz -- I am searching for a programmer who is good at least in some of [Haskell, ML, C++, Linux, FreeBSD, math] for work in Warsaw, Poland