I had a similar experience in using F# when writing my UM VM. The support for unsigned integers and bit operations made the instruction decoding easy, pattern matching on an instruction type made emulation easy, and ignoring the fact that the Pervasive input/output functions were designed to munge the data wasted a lot of time. Compared to other notes I've read from teams that used higher-level languages (vs C/C++), my implementation with just simple algorithms and basic optimizations was fast enough for the rest of the contest, thanks to unboxed integer arrays. I was able to use FSI to debug my functions and act a basic disassembler (any_to_string is your friend).
I was less successful in the rest of the contest: I spent too long on the Basic program (roman numerals are NOT my friends), I spent too long trying either exhaustive or deterministic methods for solving the Black problem, and missed the easy way to get Advise to work. The most fun I had was writing the simple 2D programs. My wife worked through many of the Adventure problems by hand.
This was my first effort in any of the contests, but I wish I did better at the "real" programming tasks. There is always next year ![Smile [:)]](/emoticons/emotion-1.gif)