start work on haskell-driven version