50 lines
887 B
Python
50 lines
887 B
Python
#======= Decoration ========
|
|
def log(f):
|
|
def g(*args):
|
|
r = f(*args)
|
|
print(">> %s %s -> %s" % (str(f).split(" ")[1], str(list(args)), str(r)))
|
|
return r
|
|
return g
|
|
|
|
#========= Composition =========
|
|
def fix1(f, v):
|
|
def g(*args):
|
|
r = f(*([v]+list(args)))
|
|
return r
|
|
return g
|
|
|
|
def curry(func, numArgs):
|
|
if numArgs == 1: return func
|
|
def f1(v):
|
|
return curry(fix1(func, v), numArgs-1)
|
|
return f1
|
|
|
|
def comp(g,f):
|
|
def r(*args, **kwargs):
|
|
return g(f(*args, **kwargs))
|
|
return r
|
|
|
|
#======== Operations ===========
|
|
def add(a, b):
|
|
return a + b
|
|
|
|
def multi(a, b):
|
|
return a * b
|
|
|
|
|
|
|
|
|
|
def Monade():
|
|
#Monade, (M a -> (a -> M b) -> M a)
|
|
def returm(x):
|
|
return [x]
|
|
def bind(m, f):
|
|
return returm(list(map(f,m)))
|
|
return returm, bind
|
|
|
|
|
|
|
|
|
|
|
|
|