code: function fanout(fst, snd) {
    if(isFunction(fst) && isFunction(snd)) {
      return x =>
        Pair(fst(x), snd(x))
    }
  
    if(valid(fst, snd)) {
      return fst.first()
        .compose(snd.second())
        .contramap(x => Pair(x, x))
    }
  
    throw new TypeError(
      'fanout: Arrows, Functions or Stars of the same type required for both arguments'
    )
  }
docs: fanout : m a b -> m a c -> m a (b, c)