haskell-semigroupoids