不确定如何使用组合器设计有用的库

Mat*_*ick 8 haskell functional-programming combinators higher-order-functions

我一直在阅读关于组合器的信息,看看它们有多大用处(例如,在Haskell的Parsec中).我的问题是,我不太确定如何实际使用它们.

以下是问题的概述:可以生成,过滤和修改分布.可以组合分布以创建新的分布.

基本接口是(伪Haskell类型术语):

generator::      parameters -> distribution

selector::       parameters -> (distribution -> distribution)

modifier::       parameters -> (distribution -> distribution)
Run Code Online (Sandbox Code Playgroud)

现在,我认为我看到了三个组合器:

combine::     generator -> generator -> generator

filter::      generator -> selector -> generator

modify::      generator -> modifier -> generator
Run Code Online (Sandbox Code Playgroud)

这些实际上是组合器吗?组合器是否有意义/是否还有其他明显的组合器我缺少?

谢谢你的建议.

yat*_*975 5

这些selector和modifier功能已经是完美的组合!除了generator和combine你可以做这样的东西(我要承担的具体性的统计分布,只是使事情了!):

modifier (Scale 3.0) $ generator StandardGaussian `combine` selector (LargerThan 10) . modifier (Shift 7) $ generator (Binomial 30 0.2)
Run Code Online (Sandbox Code Playgroud)

您可能需要使用组合运算符的优先级来使它顺利运行:)

一般来说,当我尝试为类型的值设计组合器库时A,我喜欢将我A的"结尾" 保留在最后,以便部分应用的组合器(你的selector和modifier)可以链接在一起,.而不是必须flip通过篮球.

这是一篇很好的博客文章,它可以帮助你设计组合器,它影响了我的很多想法:语义编辑器组合器.

编辑:考虑到类型签名,我可能误解了你的问题combine.也许我错过了一些东西,但是这些分布不是你的组合器应该工作的更自然的东西吗?