do_notation.py 文件源码

python
阅读 19 收藏 0 点赞 0 评论 0

项目:lambdaquery 作者: xnmp 项目源码 文件源码
def do(func, func_args, func_kargs, Monad):
    @handle_monadic_throws(Monad)
    def run_maybe_iterator():
        itr = func(*func_args, **func_kargs)

        if isinstance(itr, types.GeneratorType):

            @handle_monadic_throws(Monad)
            def send(*vals):
                try:
                    # here's the real magic
                    monad = itr.send(*vals) 
                    return monad.bind(send)
                except StopIteration:                    
                    return Monad.unit(None)

            return send(None)
        else:
            #not really a generator
            if itr is None:
                return Monad.unit(None)
            else:
                return itr
    run_maybe_iterator.__name__ = func.__name__
    return run_maybe_iterator()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号