
If it's tail recursive it'll be compiled to a loop. You don't need a pragma. Of course if it does evaluation along the way, it'll have to make a call do to that evaluation. E.g. f x = if x>0 then 0 else f (g x) Here f is tail-rec but it'll have to call g inside the loop. Simon | -----Original Message----- | From: glasgow-haskell-users-bounces@haskell.org [mailto:glasgow-haskell-users-bounces@haskell.org] On | Behalf Of Georg Martius | Sent: 01 August 2007 08:43 | To: Simon Peyton-Jones; Glasgow-haskell-users@haskell.org | Subject: Re: Annotation for unfolding wanted | | Hi, | | I am sorry for using the wrong terminology here. Let me ask again: | Does it sound reasonable to extend the compiler with a pragma that specifies | that a certain function should be compiled to a loop? And if the compiler can | not do it, it helps with some error message. | | Regards! | Georg | | On Tuesday 31 July 2007 16:20, Simon Peyton-Jones wrote: | > | However my point was more on a semantic point of view: If I write a | > | function in a recursive way, but actually do nothing else than a loop, I | > | would like a) that the compiler unrolls it to a loop and | > | b) that I can specify such a requirement, while violating it emits an | > | error. | > | > What does it mean to say "the compiler unrolls it to a loop". If GHC sees | > a tail recursive function, it certainly compiles it to a loop! (But that's | > not called "unrolling".) | > | > Simon | | -- | ---- Georg Martius, Tel: +49 177 6413311 ----- | ------- http://www.flexman.homeip.net ----------