потенциально, имея некий Pipe a b, который на вход принимает a и на выходе отдает b (
push : Pipe a b -> a -> IO ()
pop : Pipe a b -> IO b
)
то мапать первый аргумент (вход) нужно именно через (x -> a), а выход уже (b -> x)
этот пример потом когда-нибудь поможет с профункторами
другой пример (который является обобщением примера с предикатами выше) - профунктор hom(-, -), или для какого-нибудь объекта X, функтор hom(-, X) (например в категории типов хаскеля, при X = Bool, получаем функтор предикатов)