带 $ 的 Haskell 偏函数应用

2024-04-01

我是 Haskell 的新手,正在查看一个使用函数应用程序的简单示例$.

这看起来很简单——它需要一个函数并将其应用于一个值。

所以这是有道理的:

> (+3) $ 2
5

这也是有道理的:

> ($) (+3) 2
5

这是有道理的,因为第一个参数是函数,第二个参数是值。

现在考虑使用$创建部分函数。

看看类型,这是有道理的 - 它只需要一个Num键入值b:

> :t ($) (+3)
($) (+3) :: Num b => b -> b

但这就是我迷路的地方 - 这里发生了什么?:

> :t ($) (2)
($) (2) :: Num (a -> b) => a -> b

我本以为第一个参数需要是一个函数,而不是一个简单的 Num 值。

这是我的问题:

  1. 这里发生了什么事?
  2. 约束条件是什么Num (a -> b)语法是什么意思?
  3. 使用的例子是什么($)以这种方式,从类似的事情开始($) (2)?

Thanks!


一方面,数字文字如2实际上读作fromInteger 2 :: Num a => aso 可以表示任何类型的值Num a => a,意思是任何类型in类型类别Num,即除其他外还有一个特殊版本fromInteger定义返回实际类型的实际值,从整数转换而来2:

> :i Num
class Num a where
  (+) :: a -> a -> a
  (*) :: a -> a -> a
  (-) :: a -> a -> a
  negate :: a -> a
  abs :: a -> a
  signum :: a -> a
  fromInteger :: Integer -> a

As Haskell 教程 https://www.haskell.org/tutorial/numbers.html指出(在 10.3 中),

一个整数(不带小数点)实际上等价于应用fromInteger到数字的值作为Integer.

另一方面,($)有类型

> :t ($)
($) :: (a -> b) -> a -> b

所以我们有

fromInteger 2 :: Num a1 =>   a1
($)           ::          (a -> b) -> a -> b
--------------------------------------------
($) 2         :: Num      (a -> b) => a -> b

所以它是一个函数,它也必须是in类型类Num.

通常情况并非如此,但 Haskell 不知道您是否可以导入某个定义此类实例的模块:

instance Num (a -> b) where
   ....
   fromInteger n = ....
   ....

因此它在类型检查时允许这种可能性,只有这样,看到任何地方都没有定义这样的实际实例,它才会出错that.

例如,按照提示@augustss https://stackoverflow.com/users/649287/augustss在评论中,

instance (Num b) => Num (a -> b) where
   (+) f g x = f x + g x
   (*) f g x = f x * g x
   abs f x = abs (f x)
   negate f x = negate (f x)
   signum f x = signum (f x)
   fromInteger n = const (fromInteger n)

让我们写(sin + 2 * cos^2) x.

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

带 $ 的 Haskell 偏函数应用 的相关文章

  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho
  • 我们什么时候应该在 Django 中使用“db_index=True”?

    当我们应该定义db index True在模型字段上 我正在尝试优化应用程序并且我想了解更多信息db index 什么情况下我们应该使用它 文档说使用db index True在模型字段上用于加速查找 但在存储和内存方面略有缺点 我们应该使
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code
  • bash:gitolite:找不到命令

    我正在尝试使用 Gitolite 在 Gitlab 中创建一个新分支 我完成安装步骤 当我遇到 设置 gitolite 部分时 我遇到了麻烦 我跟着这个link http sitaramc github com gitolite setup
  • 如何在 kubernetes 中将秘密标记为可选?

    来自文档 除非将秘密标记为可选 否则必须先创建秘密 然后再将其作为环境变量在 pod 中使用 引用不存在的 Secret 将阻止 pod 启动 如何将秘密标记为可选 您正在寻找的是 name ENV NAME valueFrom secre
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql
  • If else 在 Web 网格列中

    如何在 webgrid 列中添加条件 if else grid GetHtml tableStyle table table bordered columns grid Columns grid Column RealName Name g
  • Azure Functions 计时器触发器线程安全

    我想知道是否有人知道如果您在 Azure 函数上设置了 Cron 设置 如果其任务执行时间超过 5 分钟 则每 5 分钟运行一次 会发生什么情况 它备份吗 或者我应该实现一个锁定功能 以防止某些东西 例如在循环中 处理先前调用已经处理的数据
  • SimpleIoC - 在缓存中找不到类型:Windows.UI.Xaml.Controls.Frame

    第一次由 SimpleIoC 实例化我的 ViewModel 时 我遇到了以下错误 我相信我已经按应有的方式设置了容器 但由于某种原因 我仍然收到以下错误 任何想法或帮助将非常感激 Microsoft Practices ServiceLo
  • 将 Angular Web 组件 EventEmitter 监听到 javascript

    我在以下工具的帮助下创建了一个小型网络组件本文 https medium com IMM9O web components with angular d0205c9db08f使用角度元素 其中包括 Input and Output 我能够将
  • svn 强制迁移

    我正在考虑将我们的 svn 代码库迁移到 perforce 看看谷歌搜索结果 我确实找到了两个具有相同功能的工具 P4转换ftp ftp perforce com pub perforce tools p4convert docs inde
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用
  • PLS-00103:遇到符号“;”当预期出现以下情况之一时:

    我正在尝试插入用户安全问题的答案 以用于密码重置功能 Ellucian 横幅 v8 提供了一个用于运行此 API 的 API 我对他们的 API 非常陌生 从下面的错误消息来看 我还远远没有正确运行它 任何帮助表示赞赏 我尝试在 Oracl
  • 自定义字符串查询操作的 Linq to NHibernate 可扩展性?

    我希望能够在 NHibernate Linq 表达式中使用自定义字符串查询 举例来说 这只是一个例子 我希望能够选择包含属性的实体 该属性是特定字符串的字谜 var myEntities EntityRepository AllEntiti
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 如何使用 AJAX 接收 JSON 文件并使用 javascript 解析它?

    我正在尝试解析 foursquare 给我的这个又长又复杂的 JSON 这是我的 AJAX 请求 ajax url https api foursquare com v2 venues explore dataType json data
  • 通用2D游戏资产和绝对节点定位

    我有一个关于通用游戏资产 and 绝对定位 of a SKNodes in Sprite Kit iOS 8 我将尝试通过如下示例来展示我的问题 想象一个2D自上而下游戏 with a SKSpriteNode它代表一座房子 一个房子有多个
  • 从我的应用程序发送电子邮件时如何避免延迟?

    我有一个小型控制台应用程序 它检查一些设置 做出一些决定 然后发送电子邮件 问题是 在我的申请完成之前 电子邮件实际上并未发送 我希望发送电子邮件的方法完成后立即发送电子邮件 最初 我只是创建了一个 MailMessage 并调用 Send
  • Caliburn.Micro 在 WPF 中拖放文件

    我已经使用 Caliburn Micro 2 0 1 创建了桌面应用程序 现在我需要添加拖放行为 用户将从 Windows 资源管理器中拖动文件 我需要获取它的路径 但是我正在搜索两天了 我没有找到任何关于如何为 Caliburn Micr
  • JPA 关系映射概念

    我有几个关于双向映射的问题 我有这些实体 员工 1 1 Parking Lot 员工 1 部门 员工 1 项目 上述关系的源实体和目标实体是什么 业主有何用ManyToOne关系 我想知道楼主是 多个实体还是一个实体 Do mappedBy
  • 如何解析一个巨大的 JSON 文件而不将其加载到内存中

    我有一个很大的 JSON 文件 2 5MB 包含大约 80000 行 它看起来像这样 a 123 b 0 26 c HUGE irrelevant object d 32 我只想为键存储整数值a b and d并忽略 JSON 的其余部分
  • 连接到 wsdl 时出错?

    I do base64string base64 encodestring s s userid passwd replace n authenticationHeader Authorization Basic s base64strin
  • Kill - 它会立即终止进程吗?

    什么是kill到底是怎么做的 我有一个父进程 它正在一个接一个地创建 100 个 作为示例 子进程 在任何孩子的工作结束时 我都会杀死孩子kill pid of child SIGKILL 我看不到ps输出 但是如果父进程出现问题并且我退出
  • Java - 获取泛型类的名称

    我有以下两个课程 class Generic
  • 为什么 React Native 中“Enter”键不触发 onKeyPress?

    我已在文本输入中添加了一个 onKeyPress 事件侦听器 以便当用户在手机键盘上单击 完成 或 转到 或 输入 时 它将调用我的 searchProducts 函数 我希望有一个 onSubmit 类型的事件侦听器选项 但无法找到类似的
  • 如何在意图中添加.apk文件

    我想在意图中添加 apk 文件 我想创建一个 共享 按钮 它将通过蓝牙或任何其他能够发送应用程序的应用程序共享整个应用程序 如果可以通过其他方式完成此操作 请告诉我 谢谢 List ApplicationInfo mAppList getP
  • 如何配置 gradle 仅使用 logback-classic 进行 Android 中的单元测试?

    我有一个使用 slf4j logback 的 Android 应用程序 Gradle 文件如下所示 compile com github tony19 logback android core 1 1 1 6 exclude group c
  • Android PreferenceFragment 找不到片段 id 的视图

    所以我正在制作一个android应用程序 我开始处理首选项 当我简单地使用 PreferenceActivity 时 一切都很完美 但是 如果我将它与 PreferenceFragment 一起使用 那么在我单击调用意图到 Settings
  • 表单身份验证添加附加信息以及 ReturnUrl

    使用表单身份验证 当应用程序需要重定向到登录页面时 是否有一个事件或任何可扩展点可以让我在重定向到登录页面之前对请求执行其他工作 我想在查询字符串中发送附加信息 这些信息可能会有所不同 因此无法将其静态嵌入到 web config 中的 l
  • 在 Android 上解析 DNS SRV 记录的轻量级方法

    在 Android 上进行 SRV 记录查找最节省资源的方法是什么 例如在 XMPP 客户端中 例如yaxim https github com pfleidi yaxim 我知道 JNDI http docs oracle com jav
  • 安装 play 框架 mongodb morphia 模块

    我正在使用以 mongodb 作为后端的 play 框架进行应用程序开发 我已经在我的 ubuntu 和 windows 上成功安装了 mongodb 和 playframework 但是如果我想使用 mongodb 我需要 play 框架
  • MacOS 更喜欢 /bin/sh 还是 /bin/bash?

    我想与某人共享一个脚本 但不确定在 MacOS 上首选哪个 哪一个最好支持 This bin sh echo Here goes my simple script that changes some settings do some stu
  • 从 ActionBarSherlock 迁移到 ActionBarCompat 时有哪些常见问题?

    我想从我的应用程序中删除 ActionBarSherlock 并将其替换为标准 ActionBarCompat 如何实现 ActionBarCompat 如何迁移活动 哪些导入替代了 ActionBarSherlock 导入 典型问题有哪些
  • 与 C# 4.0 一起使用的最佳 ORM [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 最好的方法是使用像 Nhiberta
  • 带 $ 的 Haskell 偏函数应用

    我是 Haskell 的新手 正在查看一个使用函数应用程序的简单示例 这看起来很简单 它需要一个函数并将其应用于一个值 所以这是有道理的 gt 3 2 5 这也是有道理的 gt 3 2 5 这是有道理的 因为第一个参数是函数 第二个参数是值