computation-expression相关内容

延续 monad 中的 StackOverflow

使用以下延续单子: type ContinuationMonad() =成员 this.Bind (m, f) = fun c ->m(有趣的 a -> f a c)成员 this.Return x = fun k ->×让 cont = ContinuationMonad() 我不明白为什么以下内容会导致堆栈溢出: 让映射 f xs =让 rec 映射 xs =续{匹配 xs|[] ->返 ..
发布时间:2022-01-05 10:17:20 其他开发

为什么 F# 计算表达式需要构建器对象(而不是类)?

F# 计算表达式的语法如下: ident { cexpr } 其中 ident 是构建器对象(此语法取自 Don Syme 2007 年的博客文章). 在我见过的所有示例中,构建器对象都是单例实例,并且启动时是无状态的.Don 给出了定义一个名为 attempt 的构建器对象的示例: let attempt = new AttemptBuilder() 我的问题: 为什么 F# 不直 ..
发布时间:2022-01-05 10:13:47 其他开发

如何将 `where T : U` 泛型类型参数约束从 C# 转换为 F#?

F# 的类型推断规则给我带来了一些麻烦.我正在编写一个简单的计算构建器,但无法正确设置通用类型变量约束. 我想要的代码在 C# 中如下所示: class finallyBuilder{只读动作最后行动;public finallyBuilder(Action finallyAction){this.finallyAction = finallyAction;}public TB Bind( ..
发布时间:2022-01-05 09:53:56 C#/.NET

F#携带状态时绑定到输出

我正在尝试使用计算表达式来构建动作列表.我需要绑定一个从 getFood 操作返回的值,以便我可以注册一个后续步骤来使用它. type Food =|鸡|米输入Step =|食物的食物|吃食物|睡眠时间:int类型计划=步骤计划清单键入PlanBuilder()=成员this.Bind(plan:Plan,f)=计划成员this.Yield _ =计划[]成员this.Run(计划x)=计划( ..
发布时间:2021-05-06 20:01:52 其他开发

如何构建一个累积生成器

我想为这两个表达式构建一个计算表达式.很简单 type Result=|成功的成功|List失败输入Foo = {A:整数b:字串c:布尔}输入EitherBuilder()=成员this.Bind(x,f)=匹配x与|成功->五六|失败f->失败f返回x =成功x让任一个= EitherBuilder()让Ok =要么{让!a =成功1让!b =成功" ..
发布时间:2021-05-06 20:01:08 其他开发

F#对嵌套计算表达式的调用过多

此问题是此问题的演变版本.我试图找出为什么当我在CE上运行 State.exec 时,我似乎正在获得CE的不希望的嵌套行为.似乎多次打电话给他们.这是我所拥有的: type State=('s->'a *'s)模块状态=//明确//让结果x:State= fun s->设//不太明确,但可以与其他现有功能更好地配合使用:让结果x s =设let bind(f:'a- ..
发布时间:2021-05-06 20:00:58 其他开发

重试计算表达式或F#中的其他构造

我希望能够用F#编写一个计算表达式,如果抛出异常,它将能够重试操作.现在,我的代码如下: 让x =重试(fun()-> GetResourceX())令y =重试(fun()-> GetResourceY())令z =重试(fun()-> DoThis(x,y))等等(这显然是实际代码的抽象表示) 我需要能够重试每个功能一定次数,这些次数已在elswhere中定义. 我本以为计算表达式 ..
发布时间:2021-05-06 20:00:49 其他开发

F#表达式值未在计算表达式中定义

我一直在研究带有F#计算表达式的State Monad,并且我也在尝试利用自定义操作.我得到了一些没有意义的怪异行为.编译器报告说,仅在上面两行声明一个值时,该值不存在. type State=('s->'a *'s)模块状态=//明确//让结果x:State= fun s->设//不太明确,但可以与其他现有功能更好地配合使用:让结果x s =设let bind(f ..
发布时间:2021-05-06 19:58:10 其他开发

如何更改Rx Builder的实现以解决堆栈溢出异常?

我正在尝试提出一个Rx Builder,以在F#计算表达式语法中使用Reactive Extension.我如何解决它,以免炸毁烟囱?像下面的Seq示例.是否有任何计划作为Reactive Extensions的一部分或.NET Framework未来版本的一部分提供RxBuilder的实现? 开放系统打开System.Linq打开System.Reactive.Linq输入rxBuilder( ..
发布时间:2021-05-06 19:57:37 其他开发

在计算表达式中争用TryWith

(由于无法“理解" FParsec,我遵循了我在某处阅读的建议,并开始尝试自己编写一个解析器.不知何故,我发现了看起来有机会尝试对其进行单数化的机会,现在我有了N个问题...) 这是我的“结果"类型(简体) type Result = | Success of 'a | Failure of string 这里是计算表达式生成器 type Resul ..
发布时间:2020-11-02 23:59:20 其他开发

为什么该计算表达式构建器期望“单位"为1?在我的for循环中?

这是对我正在尝试创建一个计算表达式构建器,该构建器通过自定义操作来累加一个值,并且同时支持标准F#语言构造.为了提供一个简单的示例,我使用一个构建F#列表的计算表达式.多亏了kvb和Daniel的建议,我才能走得更远,但for循环仍然有麻烦. 生成器: type Items = Items of 'a list type ListBuilder() = member ..
发布时间:2020-11-02 23:52:30 其他开发

如何编写一个计算表达式构建器,该构建器可以累积一个值并允许标准语言构造?

我有一个计算表达式生成器,可以随您建立一个值,并且具有许多自定义操作.但是,它不允许使用标准的F#语言构造,因此在弄清楚如何添加此支持方面遇到很多麻烦. 举一个独立的例子,这是一个构建F#列表的简单而毫无意义的计算表达式: type Items = Items of 'a list type ListBuilder() = member x.Yield(()) = I ..
发布时间:2020-11-02 23:47:52 其他开发

为什么F#计算表达式需要一个builder对象(而不是一个类)?

F#计算表达式的语法为: ident { cexpr } 其中ident是构建器对象(此语法来自在我所看到的所有示例中,构建器对象都是单例实例,并且无状态启动. Don给出了定义名为attempt的构建器对象的示例: let attempt = new AttemptBuilder() 我的问题:为什么F#不直接在计算表达式中使用AttemptBuilder类?当然,可以像静态 ..
发布时间:2020-11-02 22:58:44 其他开发