code: function pipeS(...ms) {
    if(!arguments.length) {
      throw new TypeError(err)
    }
  
    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: pipeS : Semigroupoid s => (s a b, s b c, ..., s y z) -> s a z