Kleisli 组合的编译错误

2023-12-31

我有一个复制自的验证模块面向铁路的编程 http://fsharpforfunandprofit.com/posts/recipe-part2/在我的应用程序中执行错误处理:

type ErrorMessage = ErrorMessage of string

type ValidationResult<'T> =
    | Success of 'T
    | Error of ErrorMessage

module ValidationResult =    
    let doubleMap successHandler errorHandler = function
        | Success x -> successHandler x
        | Error e -> errorHandler e

    let bind f = function
        | Success x -> f x
        | Error e -> Error e

    let (>=>) f g = f >> bind g

我使用以下测试函数测试 Kleisli 组合:

let validation1 (list: int list) =
    if List.length list = 6
    then Success list
    else Error <| ErrorMessage "Length error"

let validation2 list =
    if List.forall (fun x -> x > 6) list
    then Success list
    else Error <| ErrorMessage "All elements must be larger than 6"

let combined = validation1 >=> validation2
                              //^^^^^^^^^^^^ compile error

据我了解,validation1 and validation2应该组成,因为两者都是类型int list -> ValidationResult<int list>。但是我遇到了编译错误

需要一个支持运算符 '>=>' 的类型,但给定一个函数 类型。您可能缺少函数的参数。

我该如何解决这个问题?


看来你只是忘记了open ValidationResult,因此您的组合运算符不在范围内。

对于普通函数,F# 会抱怨该符号未定义。但运营商却是另一回事。

可以通过两种方式定义运算符:作为独立函数(函数式方式)或作为传递给运算符的类型之一的静态成员(.NET 方式)。在前一种情况下,函数需要在作用域内可见,但在后一种情况下则不然:只要您设法使用定义为静态成员的运算符来获取对象,就不需要它的类型可见。

这就是为什么 F# 说它“需要一个支持运算符的类型”而不是“函数未定义”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kleisli 组合的编译错误 的相关文章

  • 没有带有常量“模板参数”的 F# 泛型?

    我突然想到 F 泛型似乎不接受常量值作为 模板参数 假设有人想创建一种类型RangedInt这样 它的行为类似于 int 但保证只包含整数值的子范围 一种可能的方法是建立受歧视的工会 类似于 type RangedInt Valid of
  • Scala REPL 中的类型信息

    如果我使用 F 解释器 我可以定义一个简单的函数 如下所示 gt Function to check if x is an integer multiple of y gt let multipleOf x y x y 0 val mult
  • F#、FParsec 和递归调用流解析器(第二次)

    感谢您的回复我的第一篇文章 https stackoverflow com questions 26853718 f fparsec and calling a stream parser recursively and 我的第二篇文章 h
  • F# 中序列的递归函数

    这是一个相当微不足道的问题 但快速的谷歌搜索并没有给我答案 为序列编写递归函数的标准方法是什么 对于列表 您可以使用空列表和头 尾模式进行模式匹配 序列的等效项是什么 没有标准的方法可以做到这一点 因为您很少为序列编写递归函数 您应该查看各
  • 如何判断 F# 函数是否是纯函数?

    假设我有这两个 F 函数 let sq x x x let tm DateTime Now 显然 sq 是纯的 因为它对于给定的输入总是返回相同的值 而 tm 是不纯的 因为每次调用它时都会返回不同的值 一般来说 有没有一种方法可以确定 F
  • F# 2010 Seq.generate_using

    Visual Studio 2010 中的 Seq generate using 是否有替代 解决方法 FSharp PowerPack dll 不适用于 2010 AFAIK 很抱歉 2010 年的 PowerPack 尚未上市 我不记得
  • F# 参数传递

    我一直认为 F 有两种不同的方式来传递参数 柯里化风格和元组风格 这实际上是正确的吗 是不是很简单一种风格 柯里化风格和参数可以是简单值或元组 e g someFunc a b 这不是一个函数吗one咖喱风格的参数恰好是一个元组 因此允许我
  • ProjectCracker 与 .netstandard 2.0 项目

    我的团队最近从使用 net 框架转向使用 net 标准 2 0 作为我们的 F 库 我们有一些在项目上运行的内部脚本来自动生成 Markdown 文档 这些脚本使用 F 编译器服务 SDK 来分析代码并检索类型元数据 文档注释等 我们正在使
  • 按属性值选择 XML 节点

  • 在 IEnumerable 上使用 Seq 函数 [重复]

    这个问题在这里已经有答案了 我正在尝试在 IEnumerable 上应用 Seq 函数 更具体地说 它是System Windows Forms HtmlElementCollection它实现了ICollection and IEnume
  • F# 在类型提供程序内的类型扩展函数中生成类型

    我有以下问题 在我的类型提供程序中 我需要使用一个返回此泛型类型实例的方法来扩展我之前定义的泛型类型 我的意思是 假设我们有 type receiveType lt a gt class val Next int val Type stri
  • F# 获取随机数列表

    我正在尝试用随机数填充列表 但很难获得随机数部分 我现在打印出一个随机数 10 次 我想要的是打印出 10 个不同的随机数 let a new System Random Next 1 1000 let listOfSquares for
  • 什么是错误“类型实例化涉及 byref 类型。” F# 中的解决方法是什么

    我有一些代码包装 TA Lib 很多包装器非常相似 let sma timePeriod int data float let mutable outStartIndex 0 let mutable outNbElement 0 let m
  • F# 编码练习

    我一直在 Visual Studio 2010 中涉足 F 我是一名在 C 和 Java 等面向对象语言方面拥有更多代码 架构设计经验的开发人员 为了扩展我的技能并帮助做出更好的决策 我正在尝试使用不同的语言来做不同的事情 特别是掌握使用函
  • F# nameof 运算符不是一等函数

    我正在使用 F 4 7
  • 单位安全平方根

    我只是想知道如何以与 F 正确交互的方式编写用户定义的平方根函数 sqrt 单位制 http blogs msdn com andrewkennedy archive 2008 09 04 units of measure in f par
  • 从 F# 调用 Newtonsoft.Json 出现意外结果

    我没有从该 F 代码中获得预期结果 我希望 t 包含调用 JsonSchema Parse json 的结果 但它是空的 我究竟做错了什么 open Newtonsoft Json open Newtonsoft Json Schema l
  • 在 Deedle 系列中算得上独一无二

    我想对我的数据框中的系列有一个概述 例如 pandas 的唯一值计数 我不知道是否有内置函数可以实现这一点 到目前为止 我已经完成了一个函数来获取不同特征的数量 我可以设法完成这项工作 我的问题只是关于内置功能 let unique s D
  • 在 F# 类型提供程序中发出生成的类型

    我创建了一个简单的生成类型提供程序 它采用重新组织类型的程序集的路径 将它们置于类型提供程序命名空间下 如果您愿意 可以说是内部化 相关代码的链接在这里https github com colinbull Playground https
  • 将事件绑定到 ItemsControl 中的按钮

    我有一个 Windows Phone 7 应用程序 其中包含一些 xaml 如下所示

随机推荐

  • Java 程序为音频文件创建 PNG 波形

    如何使用 Java 将 Wav 文件转换为 PNG 波形图像文件 java MyProgram class path to wav file path where to write png file 预期成绩 指定路径中保存的png是传入的
  • 更改 .png 以与 JpegImagesToMovie.java 一起使用

    我正在使用 JpegImagesToMovie java 将图像转换为 mov 文件 我想知道是否可以编辑它来处理 png 文件 因为视频的质量不是很好 更改它会改善它 ImageIO write img png new File C Us
  • 何时使用define_singleton_method v Define_method

    在一个答案中这个问题 https stackoverflow com questions 19368437 how to use define method inside initialize用户 mu 太短 解释说您不希望对象的行为在初始
  • QML Row 与 RowLayout

    我正在尝试为我的应用程序编写一个顶栏 其中应主要包含应用程序徽标 小图像 和应用程序标题 仅文本 此外 我希望这个顶栏能够根据窗口的高度自动调整大小 我是 QML 新手 但我想我应该将这些组件包装在Row or a RowLayout ht
  • Swift 在 UILongPress 上保留 UISwitch 状态

    我在我的项目中添加了 UISwitch 上的 UILongPressGestureRecognizer class ViewController UIViewController UIGestureRecognizerDelegate va
  • 从 sqlite 触发器调用 Java 方法 (android)

    我想要使 用 sqlite 触发器注册回调方法 例如 public void printLog Log i TAG 1 row added 在 sqlite 中插入任何行后调用此方法 是否可以 怎么做 SQLite 提供数据变更通知回调 h
  • 使用 GWT 使用 XMLHttpRequest 发送 XML

    目前我使用 JavaScript 代码在 GWT 中发送 XML 数据 有没有更简单的方法来发送它们 sendRequest addClickHandler new ClickHandler Override public void onC
  • Swift:键盘显示时向上滚动视图

    我有一个滚动视图 我想在显示键盘时向上滚动 当键盘显示时 我因以下错误而崩溃 2014 09 29 14 48 50 738 swrd 1563 472888 swrd EditPhotoViewController KeyboardWas
  • 将参数传递给 JSF 中的视图作用域 bean

    假设我的 JSF 2 应用程序中有两个页面 第一页显示对象表 汽车或其他内容 另一个页面能够显示一个特定对象的详细信息 表页位于请求范围内 因为每次用户请求时都应重新加载对象 详细信息页面在视图范围内 因此 当我单击表格内的某个对象时 该对
  • Android 中使用 DateFormat 的 java.lang.IllegalArgumentException

    这是我的代码片段 这里的日期格式为 10 Sep 2013 09 53 37 TextView tvDate TextView convertView findViewById R id entered date DateFormat da
  • 如何在 python 3 中通过 FTP 发送 StringIO?

    我想通过 FTP 将文本字符串作为文件上传 import ftplib from io import StringIO file StringIO file write aaa file seek 0 with ftplib FTP as
  • 在 jQuery 中绑定多个事件

    我有一个自定义 jQuery 插件 它绑定了change事件到表单元素 在本例中是一些input元素 这change事件用于向其他一些组件指示发生了更改 这按其应该的方式工作 但是 我发现需要绑定一个额外的change事件相同input元素
  • 为什么 C 中不允许将数组大小作为常量变量,而 C++ 中允许?

    我试着写一个c程序如下 const int x 5 int main int arr x 1 2 3 4 5 当我尝试使用 gcc 进行编译时 会发出警告 如下所示 simple c 9 错误 可变大小的对象可能未初始化 但在 C 中也是允
  • 反应本机 fs 库不写入文件

    当我使用react native fs创建文件时 回调成功 但该文件不在我的android data com myapp files test txt库中 logcat 中没有错误 所以我想知道为什么我的简单 App js 代码不起作用 S
  • 使用 Kotlin 和 Mockito 模拟通用接口

    我正在尝试使用 Mockito 模拟 Kotlin 中的通用接口 但到目前为止我还没有找到自然的解决方案 鉴于 interface X
  • NSManagedObjectContext 已锁定

    我的应用程序中有两个线程在运行 在主线程中 我更新实体中键的值或从核心数据获取一些行 在后台线程中 我从服务器下载数据 但有时在更新 处理核心数据时 managedObjectContext executeFetchRequest requ
  • 角度错误 TS2531:对象可能为“空”

    所以我有一个 Component html 其中包含如下输入
  • Android 拆分无法正常工作

    在过去的 4 个月里 我一直在开发 Android 应用程序 并遇到了以下有关拆分功能的问题 String arr SoapPrimitive result SoapPrimitive envelope getResponse arr re
  • Google OAuth2 服务帐户 HTTP/REST 身份验证

    我正在尝试使用下面的文档发出访问令牌请求 https developers google com identity protocols OAuth2ServiceAccount https developers google com ide
  • Kleisli 组合的编译错误

    我有一个复制自的验证模块面向铁路的编程 http fsharpforfunandprofit com posts recipe part2 在我的应用程序中执行错误处理 type ErrorMessage ErrorMessage of s