haskell Semigroupoids and semigroupoid operations requiring Haskell extensions