Функции selector
и modifier
уже являются отличными комбинаторами!Наряду с generator
и combine
вы можете делать что-то вроде (я собираюсь взять статистические распределения для конкретности и просто выдумывать!):
modifier (Scale 3.0) $ generator StandardGaussian `combine` selector (LargerThan 10) . modifier (Shift 7) $ generator (Binomial 30 0.2)
Возможно, вам придется немного повозитьсяс приоритетом оператора объединения, чтобы это работало гладко:)
В общем, когда я пытаюсь создать библиотеку комбинаторов для значений типа A
, мне нравится сохранять мой A
's "в конце", так что частично примененные комбинаторы (ваши selector
и modifier
) могут быть соединены вместе с .
вместо того, чтобы flip
проходить через обручи.
Вот хорошая статья в блоге, которая может помочь вам в разработке комбинаторов, она повлияла на многие мои мысли: Комбинаторы семантического редактора .
РЕДАКТИРОВАТЬ: возможно, я неправильно понял ваш вопросс учетом сигнатуры типа combine
.Может быть, я что-то упускаю, но не будут ли распределения более естественными объектами, с которыми должен работать ваш комбинатор?