class[['a, 'b]]fmap_engine :'a #engine -> ('a final_state -> 'b final_state) ->['b]engine
Similar to map_engine but different calling conventions: The
      mapping function is called when the argument engine reaches a
      final state, and this state can be mapped to another final state.