繁体   English   中英

功能组成部分应用

[英]Function composition partial application

您好,有人可以从功能组合的真实世界Haskell向我解释此示例:

data Doc = ToBeDefined deriving (Show) 

(<>) :: Doc -> Doc -> Doc
a <> b = undefined

series :: Char -> Char -> (a -> Doc) -> [a] -> Doc
series open close item = enclose open close
                         . fsep . punctuate (char ',') . map item
                         -- Who does fsep compose with?

enclose :: Char -> Char -> Doc -> Doc
enclose begin end input = char begin <> input <> char <> end

我不明白谁是正确的操作数. fsep . fsep表达式。

( . ) [who is here ]  fsep 

因为从外观上看,闭合和打开只是一个字符。您可以用数据类型(在我们的例子中是字符)组成一个函数吗?

PS可以咖喱的功能组成?

所以enclose接受3个参数:其中2个已经固定openclose ,第三个是fsep的结果。

基本上你可以做f(x1...xn-1 xn) . g(y1....yn)(k) f(x1...xn-1 xn) . g(y1....yn)(k)只要g(y1...yn)(k) = xn。

这里没有什么令人兴奋的事情。 您引用的函数仅仅是

series open close item = enclose open close . fsep . punctuate (char ',') . map item

enclose open close后加上一个换行符,以提高可读性(这不会​​改变解析方式)。 即操作数到. 您询问的是enclose open closefsep

在这里, enclose open closeenclose功能的部分应用:

enclose :: Char -> Char -> Doc -> Doc
enclose open   ::  Char -> Doc -> Doc
enclose open close   ::    Doc -> Doc

因此,您撰写Doc -> Doc函数产生一个函数之前Doc


实际上,从技术上讲,这并不完全正确:因为. 关联的,右操作数实际上就是它右边的所有内容 ,即

     (enclose open close) . (fsep . punctuate (char ',') . map item)

但是由于f . (g . h) ≡ (f . g) . h f . (g . h) ≡ (f . g) . h f . (g . h) ≡ (f . g) . h没关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM