Skip to content

Problem with Applicative CEs and 'Zero' #10379

Closed
@gusty

Description

@gusty

Repro steps

This script works fine, but when we uncomment the BindReturn member it fails because it seems it doesn't use the Zero method.

type Builder () =
    member        __.ReturnFrom (expr) = expr                                  : seq<'T>
    member inline __.Return (x: 'T) = Seq.singleton x                          : seq<'T>
    member inline __.Yield  (x: 'T) = Seq.singleton x                          : seq<'T>
    member inline __.Bind (p: seq<'T>, rest: 'T->seq<'U>) = Seq.collect rest p : seq<'U>

    member inline __.Delay (expr: _->seq<'T>) = Seq.delay expr : seq<'T>
    member        __.Run f = f : seq<'T>

    member inline __.Zero () = Seq.empty : seq<'T>

    // member inline __.BindReturn   (x : seq<'T>, f: 'T -> 'U) : seq<'U> = Seq.map f x

let seqbuilder= new Builder ()

let _pythags = seqbuilder {
  let! z = seq [1..50]
  let! x = seq [1..z]
  let! y = seq [x..z]
  if (x*x + y*y = z*z) then return (x, y, z) }

Expected behavior

Compile fine with the BindReturn member

Actual behavior

Doesn't compile with the BindReturn member

Known workarounds

Add an else branch. but still looks like a regression.

Related information

F# 5.0

Metadata

Metadata

Assignees

Labels

Area-ComputationExpressionsEnd-to-end experience for computation expressions (except async and state machine compilation)BugImpact-Medium(Internal MS Team use only) Describes an issue with moderate impact on existing code.

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions