是否可以在Haskell中操作嵌套函数组合,以这种方式在构图之前对每个函数执行一些处理?Haskell嵌套堆肥函数
假设像(lines . unlines . words) "Testing Haskell composition"
这样的嵌套合成(它没有意义,它只是一个随机的例子)。 我想在执行lines
,unlines
和words
之前做一些事情。事情是这样的假码:
performComposition :: [functions] -> returnValue
performComposition [] =()
performComposition (f:fs) = do something
f (performComposition fs)
是否有可能,哪怕是要创建一个新的运营商?
EDIT(2016年2月17日)
我没有提到,我想做点什么的最后一个功能有所不同。在上面的示例中,words
函数在执行之前会做与其他函数不同的操作。
我找到的解决方案详述如下。
你可以写你自己的* *组成运营商 - 但副作用的'做something'部分气味... – Carsten
你能成为在你的例子中更具体一点?你想用这个做什么?你试图解决什么问题,通过简单地使用类似'run before before before >> return computation >> =(\ val - > after >> return val)''之类的东西就不能解决这个问题。这是一个单子函数,所以它不能用来代替'运算'。 – bheklilr
等待:你想要这个:'performComposition [] = id; performComposition(f:fs)= f。 performComposition fs'?但是,这只是简单地将构图推广到函数列表(这是一个“折叠”)。 – Bakuriu