I looked at generating C for AVR with JHC. I wanted to see what this program became:
http://github.com/solidsnack/trippy-waves/blob/99ad424a3ed4a21ff6f6a662293d6d21e92d6611/using-jhc/RGB.hs The program is relatively simple. It doesn't work, of course (I never did get the right FFI bindings figured out) but the generated C is suggestive. http://github.com/solidsnack/trippy-waves/blob/99ad424a3ed4a21ff6f6a662293d6d21e92d6611/using-jhc/hs.out_code.c The generated `main' is very plain: static void A_STD ftheMain(void) { jhc_function_inc(); uintptr_t v10 = ((uintptr_t)DDRB()); *((uint8_t *)(v10)) = 23; uintptr_t v18 = ((uintptr_t)PORTB()); return *((uint8_t *)(v18)) = 23; } This is a simple, literal translation of my foreign calls. To all appearances, the runtime is entirely bypassed. The function `jhc_function_inc()' is a performance counter, set to no-op for non-profiling builds as far as I can tell. It also doesn't compile but that's because I can't figure out how to declare pointers in the FFI; and if I could, then I'd have to go through by hand and pull out includes for things that aren't available for AVR programming -- <locale.h> and such. -- Jason Dusek _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe