OSlash icon indicating copy to clipboard operation
OSlash copied to clipboard

How to convert a plain function into a function that returns a monad with inflix operators

Open arnauorriols opened this issue 7 years ago • 0 comments

An example is worth 1000 words:

import oslash

def operation_that_succeeds(input):
    return oslash.Right(input + 1)

def operation_that_fails(input):
    return oslash.Left("Failure")

def lift(m):
    def w(f):
        return lambda x: m.unit(f(x))
    return w

@lift(oslash.Right)
def pure_function(input):
    return input + 1

if __name__ == "__main__":
    print(operation_that_succeeds(45) | operation_that_succeeds | pure_function | operation_that_succeeds)

How can I rewrite this without needing to implement the lift decorator?

arnauorriols avatar Jul 03 '18 11:07 arnauorriols