Size: a a a

2021 February 26

AH

Ayrat Hudaygulov in F# Chat
member inline this.While (moveNext, cexpr) =
           while moveNext() do cexpr
источник

AH

Ayrat Hudaygulov in F# Chat
если у тебя там монады нет, то так
источник

VS

Vasily Shapenko in F# Chat
Дмитрий Башинский
А как найти пример такого на дотнете, чисто посмотреть?
Ну у меня смутно осталось в памяти, что такое делал Рикардо Терелл в акке на квотейшнах
источник

I

IdiocyAcceptance in F# Chat
Ayrat Hudaygulov
member inline this.While (moveNext, cexpr) =
           while moveNext() do cexpr
не, cexpr уже () там
источник

AH

Ayrat Hudaygulov in F# Chat
ой не
источник

I

IdiocyAcceptance in F# Chat
и по факту ничего не меняется
источник

I

IdiocyAcceptance in F# Chat
Я вот сломался на этом
источник

AH

Ayrat Hudaygulov in F# Chat
if moveNext() then cexpr else zero
источник

AH

Ayrat Hudaygulov in F# Chat
IdiocyAcceptance
Я вот сломался на этом
вот смотри пример с монадой

   // The whileLoop operator.
   // This is boilerplate in terms of "result" and "bind".
   let rec whileLoop pred body =
       if pred() then body |> bind (fun _ -> whileLoop pred body)
       else result ()
источник

ДБ

Дмитрий Башинский... in F# Chat
Vasily Shapenko
Ну у меня смутно осталось в памяти, что такое делал Рикардо Терелл в акке на квотейшнах
Поищу, спасибо
источник

AH

Ayrat Hudaygulov in F# Chat
у тебя нет монады, у тебя просто дсл для ICollection, который возвращает unit в каждом действии
источник

I

IdiocyAcceptance in F# Chat
Ayrat Hudaygulov
вот смотри пример с монадой

   // The whileLoop operator.
   // This is boilerplate in terms of "result" and "bind".
   let rec whileLoop pred body =
       if pred() then body |> bind (fun _ -> whileLoop pred body)
       else result ()
Ну, я это всё смотрел
источник

I

IdiocyAcceptance in F# Chat
допустим, с for всё ясно - есть seq, есть forBody
источник

I

IdiocyAcceptance in F# Chat
а при этом у while есть pred, но нет whileBody
источник

I

IdiocyAcceptance in F# Chat
я хз где он
источник

AH

Ayrat Hudaygulov in F# Chat
{ while expr do cexpr }
раскрывается в
builder.While(fun () -> expr, builder.Delay({ cexpr }))
источник

I

IdiocyAcceptance in F# Chat
типа он заинлайнился до цикла самого вообще
источник

I

IdiocyAcceptance in F# Chat
из-за нулевого делея
источник

I

IdiocyAcceptance in F# Chat
и всё, body пропал
источник

AH

Ayrat Hudaygulov in F# Chat
то есть твой

       while x > 0 do
           yield x
           x <- x - 1

раскроется в
if x > 0 then
 builder.Delay(fun () -> builder.Yield x; x <- x -1)

делей заинлайнится
if x > 0 then
 builder.Yield x
 x <- x -1

Yield заинлайнится

if x > 0 then
 this.Add x
 x <- x -1
источник