There are some commercial solutions that compile bytecode to native code, but they are a bit on the expensive side.
Aonix and JET are two of them.
Sadly, GCJ is dead even though is still part of GCC.
Happily you can use curly braces in Haskell if you really want to. You have the choice between:
do something 10
b <- somethingElse
something b
and do {
something 10;
b <- somethingElse;
something b
}
I've only ever seen the latter style very rarely though. I think it's also good for generating code so that you don't have to worry about whitespace and lining your generated code up properly.
Also I know its a preference thing, but I like curly braces. It makes an old C programmer feel more at home.