管道和过滤器的架构模式定义为一系列处理元素,其排列方式是使每个元素的输出为next的输入。每个示例似乎都考虑通过某种共享缓冲区执行的进程间或线程间连接。
在我看来,Haskell函数组合正在执行相同的任务。我们能否说这只是此模式的一个实例,即使它只是关于函数排序,并且没有显式缓冲区用作管道?如果是,对于非惰性语言,我们可以说同样的话吗?
管道和过滤器的架构模式定义为一系列处理元素,其排列方式是使每个元素的输出为next的输入。每个示例似乎都考虑通过某种共享缓冲区执行的进程间或线程间连接。
在我看来,Haskell函数组合正在执行相同的任务。我们能否说这只是此模式的一个实例,即使它只是关于函数排序,并且没有显式缓冲区用作管道?如果是,对于非惰性语言,我们可以说同样的话吗?
Answers:
它们是连接的,但是连接是相反的(某种)。
适当类别中的形态构成可以对功能构成(类别Set
用于严格的语言和CPO
惰性语言)和过程构成(类别为(AFAIK,未命名)类别,其中对象是字符串,态射是外壳)进行准确建模流程,组成是管道操作员)。可以看到Shell进程,而不会失去一般性或准确性,因为type的(惰性)函数可以将type的String -> WriterT String IO String
纯函数String -> String
无损地转换为type的函数或从type的函数无损地进行转换String -> Identity String
,因此两者实际上都是(>>=)
伪装的。
C
全P
动脉的类别O
。
它们是有区别的。管道和过滤器处理数据和数据连接,而Haskell函数组合处理一流的函数。一流的功能可以通过管道和过滤器无法实现的方式来组合。
进一步阅读
在功能编程的上下文中,可组合性是什么意思?
++
,composition为.
,++ . ++
将获取一个值并返回该值两次递增的值,但++
它不是一流的函数,它仅获取一个值并返回一个值。合成函数是一类函数,它接受两个函数并返回一个。
CPO
类别?我的Google-fu很弱:(