code: function composeS(...args) {
    if(!arguments.length) {
      throw new TypeError(err)
    }
  
    const ms =
      args.slice().reverse()
  
    const head =
      ms[0]
  
    if(!isSemigroupoid(head)) {
      throw new TypeError(err)
    }
  
    if(ms.length === 1) {
      return head
    }
  
    return ms.slice().reduce((comp, m) => {
      if(!isSameType(comp, m)) {
        throw new TypeError(err)
      }
  
      return comp.compose(m)
    })
  }
docs: composeS : Semigroupoid s => (s y z, s x y, ..., s a b) -> s a z