Мне нужна функция с типом Pipe a b m r -> Pipe (a, c) (b, c) m r
.
Но сколько бы я ни играл с for
, ~>
или >~
; Я не могу правильно сопоставить типы.
Вы можете помочь мне?
Мне нужна функция с типом Pipe a b m r -> Pipe (a, c) (b, c) m r
.
Но сколько бы я ни играл с for
, ~>
или >~
; Я не могу правильно сопоставить типы.
Вы можете помочь мне?
Я не думаю, что это возможно в целом. Предположим, нам удалось это написать:
hypotheticalLift :: Pipe a b m r -> Pipe (a, c) (b, c) m r
Какое поведение должно быть у hypotheticalLift (yield b)
? Предположительно, это должно быть то же самое, что и yield (b, c)
для какого-то c
, но какое c
и почему?
hypotheticalLift
просто передаст второй аргумент кортежа как есть. Ему не нужно генерировать c
, как и Control.Arrow.first
.
- person utdemir; 26.12.2016
c
из восходящего потока для каждого c
, отправленного в нисходящем направлении. Когда вы хотите yield
b
, вы ставите его в очередь, которая может стать сколь угодно большой, пока await
выполнение a
не даст вам c
в качестве побочного эффекта, или вы немедленно await
и ставите a
в очередь до тех пор, пока оно вам не понадобится? Когда вы await
и a
, ставите ли вы сопутствующие c
в очередь, которая может стать сколь угодно большой?
- person Gurkenglas; 26.12.2016