A transactional implementation of Rete/UL in Haskell