Как мне «отфильтровать» полученные значения сопрограммы, чтобы они никогда не доходили до потребителя? - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь обернуть голову в сопрограммы в PureScript, точнее, сейчас я пытаюсь применить какой-то фильтр к производителю.

Рассмотрим следующий код, который является просто генератором случайных чисел (производитель), подключенным к регистратору (потребителю):

producer :: Producer Int Aff Int
producer = produceAff go
    where
    go emitter = do
        n <- liftEffect $ randomInt 0 1000
        emit emitter n
        when (n > 900) do
            close emitter n
        delay (Milliseconds 250.0)
        go emitter

logNumbers :: Consumer Int Aff Int
logNumbers = forever $ consumer \n -> do
    liftEffect $ logShow n
    pure Nothing

main :: Effect Unit
main = void
    $ runAff (either logShow \lastN -> log ("output: " <> (show lastN)))
    $ runProcess
    $ (producer $$ logNumbers)

Не касаясь кода producer и logNumbers как я могу предотвратить достижение некоторых чисел logNumbers?например, отменить все числа ниже 500.

...