
People want to believe that Haskell is a better language than C, but how could this possibly be true when Haskell lacks the very basic "goto" feature??? If the world is going to take Haskell seriously, then this serious blight needs to be addressed immediately! Thus I proud to present to you the "GotoT-transformers" package which provides this missing functionality and so finally makes Haskell a serious contender with C. On a more serious note, there are times when it can be useful to not only abort a computation in the middle, but to then transfer the flow of execution to another computation: do [...stuff...] when condition1 $ goto x [...more stuff...] when condition2 $ goto y [...more stuff...] when condition3 $ goto z Towards this end, I developed this package which provides a GotoT monad transformer and a "goto" function that takes a monadic computation and returns a monadic value that has the effect of transferring control to the new computation. Obviously this functionality can be abused, but when it is the natural fit I believe that it is much better to use it directly then to go through all sorts of contortions resulting in uglier code just to avoid it on principle. The best implementation I could think of was to use a "trampoline" approach. The GotoT monadic transformer is represented by a type which contains (wrapped inside the inner monad) either a pure value or a monadic computation. The runGotoT function operates by returning the value if it is pure, and evaluating the monadic computation and feeding the result back into itself otherwise. The "trampoline" term refers to the fact that the flow of execution bounces back to the runGotoT function as long as the computation keeps calling the "goto" function. I hope that the community not only finds this functionality useful, but also that does not kill me for committing the egregious act of bringing "goto" into the Haskell world. Cheers, Greg