-- Left reduce type Reducer a r = r -> a -> r -- Here's where then rank-2 type is needed type Transducer a b = forall r . Reducer a r -> Reducer b r