class Monad: def __init__(self, bind, value): self.__bind = bind self.__m = unit(value) def bind(self, f): self.__m = self.__bind(self.__m, f) return self def __lshift__(self, f): self.__m = self.__bind(self.__m, f) return self """ if __name__ == "__main__": Monad(bind, 1) << (lambda x: x+10) << (lambda x: 2*x) add = lambda a, b: a+b print(list(zip([1,2,3],[4,5,6]))) print(list(zipWith(add,[1,2,3],[4,5,6]))) """