46 lines
803 B
Python
46 lines
803 B
Python
import os
|
|
from functools import reduce
|
|
|
|
|
|
def constant(value):
|
|
return lambda _: value
|
|
|
|
|
|
def combine(items):
|
|
if len(items) == 0:
|
|
return []
|
|
|
|
return reduce(
|
|
lambda total, i: total + i,
|
|
items
|
|
)
|
|
|
|
|
|
def compose(*fns):
|
|
return lambda i: reduce(
|
|
lambda out, fn: fn(out),
|
|
fns, i
|
|
)
|
|
|
|
|
|
first = lambda i: i[0] if len(i) > 0 else None
|
|
|
|
|
|
def swap_ext(extension: str):
|
|
return lambda i: os.path.splitext(i)[0] + extension
|
|
|
|
|
|
def map_cases(param, cases):
|
|
for predicate, fn in cases:
|
|
if predicate(param):
|
|
return fn(param)
|
|
return param
|
|
|
|
|
|
def until(condition_fn, iter_fn, items, default_value=None):
|
|
for i in items:
|
|
result = iter_fn(i)
|
|
if condition_fn(result):
|
|
return result
|
|
return default_value
|