Haskell:我们如何定义通用日志记录包装函数?

时间:2016-09-22 12:49:35

标签: python haskell functional-programming decorator

假设我们想要一个函数log接受任何函数,包装函数并记录函数的输入/输出。像这样的伪代码:

func log(func f, input) {
  var output = f(input);
  log_data(input);
  log_data(output);
}

在Haskell中这怎么可能?如何在函数调用中定义具有一般输入列表的通用函数指针?这可能类似于用于loggin的Python装饰器。

更具体一点,我想要一个通用机制来为我的应用程序中的所有函数的输入/输出添加日志记录。当然,这可以通过为每个函数添加两行代码来记录输入和输出,但我想要一个适用于任何输入的所有函数的通用解决方案。

Python中的示例日志装饰器:

def logged(f):
    @wraps(f)
    def wrapped(*args, **kwargs):
        print "Logging..."
        r = f(*args, **kwargs)
        print "Call finished"
        return r
    return wrapped

@logged
def myfunc(myarg):
    print "my function", myarg
    return "return value"

0 个答案:

没有答案