Clojure transducers in a typed setting, in Haskell