Haskell:类型推断和函数组合

2023-11-25

这个问题的灵感来自于此answer另一个问题,表明您可以使用定义为的函数从列表中删除每个出现的元素:

removeall = filter . (/=)

用铅笔和纸根据以下类型进行计算filter, (/=) and (.),该函数的类型为

removeall :: (Eq a) => a -> [a] -> [a]

这正是您根据合同所期望的。然而,使用 GHCi 6.6,我得到

gchi> :t removeall
removeall :: Integer -> [Integer] -> [Integer]

除非我明确指定类型(在这种情况下它工作正常)。为什么 Haskell 为函数推断出这样一个特定的类型?


为什么 Haskell 为函数推断出这样一个特定的类型?

GHCi 正在使用类型默认,从一组可能的类型中推断出更具体的类型。您可以通过禁用来轻松避免这种情况单态限制,

Prelude> :set -XNoMonomorphismRestriction
Prelude> let removeall = filter . (/=)
Prelude> :t removeall 
removeall :: (Eq a) => a -> [a] -> [a]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell:类型推断和函数组合 的相关文章

  • 为什么 GeneralizedNewtypeDeriving 没有安全的 Haskell?

    来自 GHC 手册 第安全语言 http www haskell org ghc docs 7 6 2 html users guide safe haskell html safe language 模块边界控制 使用安全语言编译的 Ha
  • 计算/获取分层数据的“级别”

    好吧 我真的不知道这是否是正确的标题 但我不知道如何称呼它 我的问题是关于我的作业 我现在已经工作了几个小时 主题是 函数式数据结构 我有点陷入困境 我不知道如何继续 所以我需要编写一个具有以下签名的函数 data Heap e t Hea
  • 如何在 Kotlin 中正确处理大于 127 的 Byte 值?

    假设我有一个带有变量的 Kotlin 程序b类型的Byte 外部系统向其中写入大于的值127 外部 意味着我无法更改它返回的值的类型 val a Int 128 val b Byte a toByte Both a toByte and b
  • 如何在 blaze-html 中渲染 blaze-svg 标记

    我想将使用 blaze svg 生成的 svg 图直接包含在使用 blaze html 生成的 html 中 两者都基于 blaze markup 所以我希望它很容易 diagram1 Svg diagram1 try1 Html try1
  • Haskell 中的常量变量声明

    要声明常量变量 我可以在 Ruby 中执行以下操作 class COLOR RED 10 BLUE 20 GREEM 30 end COLOR RED回报10 COLOR BLUE回报20 等等 我如何在 Haskell 中实现这一点 我想
  • 计算两点之间的距离(Haskell)

    给定两个元组的输入 我希望能够使用以下公式计算两点之间的距离 距离 sqrt x1 x2 2 y1 y2 2 所以我希望函数调用和输出如下所示 gt distance 5 10 3 5 5 385 当我尝试运行下面的代码时 它告诉我输入 w
  • 为什么haskell中的递归列表这么慢?

    我对 Haskell 很陌生 我在 Haskell 中定义了一个函数 febs Integral a gt a gt a febs n n lt 0 0 n 1 1 n 2 1 otherwise febs n 1 febs n 2 但是
  • 我应该使用镜头中的什么来按索引构建只读吸气剂?

    我有一个内部细节被隐藏的类型 我想提供某种镜头 可以在特定索引处读取所述类型的元素 但是not修改它们 一个Ixed我的类型的实例似乎没有做我想要的事情 因为它明确允许修改 尽管不允许插入或删除 如果我想允许只读索引 我不确定我使用什么 如
  • 如何组合过滤条件

    过滤器类函数接受一个条件 a gt Bool 并在过滤时应用它 当您有多个条件时 使用过滤器的最佳方法是什么 使用了应用函数 liftA2 而不是 liftM2 因为出于某种原因我不明白 liftM2 在纯代码中如何工作 liftM2 组合
  • 反应性香蕉时间延迟

    我已经查阅了文档反应香蕉 http hackage haskell org package reactive banana 而且我找不到指定明确时间延迟的方法 举例来说 我想采取Event t a并将其所有发生的事件移至未来 1 秒 或获取
  • 为什么不允许接口作为注释成员?

    考虑这段代码 Retention RetentionPolicy RUNTIME Target ElementType METHOD public interface Bar Foo foo default FooImpl FooConst
  • 我应该使用什么递归方案来重复有效的操作,直到其结果符合某些标准?

    也就是说 我要问的是一个循环 effectful Int gt IO Int effectful n do putStrLn Effect show n return n condition 3 final Int gt IO final
  • 在 Haskell 命令行应用程序中提示输入密码

    以下 Haskell 程序提示用户在终端中输入密码 如果输入正确则继续 main do putStrLn Password password lt getLine case hash password member database of
  • 为什么 IsAssignableFrom() 不适用于 int 和 double?

    这是错误的 typeof double IsAssignableFrom typeof int 这是错误的 typeof int IsAssignableFrom typeof double 但这有效 double a 1 0 int b
  • 如何处理在组合下发生变化的类型?

    我最近读了一篇非常有趣的论文单调性类型 https infoscience epfl ch record 231867 files monotonicity types pdf其中描述了一种新的 HM 语言 该语言可以跟踪操作之间的单调性
  • 使用 Haskell 将函数注入到 Java .class 文件中

    我使用 Haskell 编写了一个 Java 字节码解析器 它工作得很好 然而下一步让我完全难住了 我的 Haskell 程序需要修改 class 文件 以便在执行时 Java 程序打印 输入 此处的方法名称 在执行方法之前 并且 退出 此
  • 在Python中检测re(regexp)对象

    我想知道什么是正确的 pythonic 向后和向前兼容的方法如何检查对象是否已编译re object isinstance方法不能轻易使用 而生成的对象声称是 sre SRE Pattern object gt gt gt import r
  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架
  • Typescript:隐式无参数函数类型

    我想要作为参数给出的函数的限定类型 我希望这种类型要么是一个没有参数的函数 返回一个包含参数的 void 函数 动作 要么是它返回自身的 void 函数 这是我想使用的代码 interface JsonArray extends Array
  • 如何使用 Haskell 提交 html 表单

    我知道如何使用http 管道 http hackage haskell org package http conduit 2 1 0包的 simplehttp 从 URL 检索页面 现在如果那样的话怎么办 网页有一个输入文本字段和一个提交按

随机推荐

  • Java:IndentingXMLStreamWriter 替代方案?

    我正在使用 StAX 创建一个相当大的 xml 文档 到目前为止 我一直在使用 IndentingXMLStreamwriter 类来获取格式良好的文档 另请参阅这个答案 几天前 我们使用较旧的 jdk 版本 6 26 设置了一个 jenk
  • JSF 更新复合组件

    是否可以仅通过指定父复合 ID 来更新复合组件的子组件 例如 如果我有
  • appcfg.py 显示您必须以管理员身份登录

    当我尝试通过以下方式将示例 csv 数据上传到我的 GAE 应用程序时appcfg py 它显示以下 401 错误 2015 11 04 10 44 41 820 INFO client py 571 Refreshing due to a
  • 如何在 Selenium WebDriver 中自动清除浏览器缓存?

    如何在每次测试运行之前清除浏览器缓存 我尝试过driver manage deleteAllCookies in setUp创建驱动程序实例后的方法 它适用于 Firefox 但对于 IE 不起作用 有没有IE的解决办法 请提供给我 您可以
  • .NET 中的跨进程读写同步原语?

    是否有跨进程工作的读 写锁定机制 类似于互斥锁 但读 写而不是独占锁定 我想允许并发读取访问 但允许独占写入访问 Windows 不包含跨进程读写锁 可以使用信号量和互斥量的组合来构造互斥量 互斥量由写入者持有以进行独占访问 或者由读取者持
  • 函数指针如何工作?

    我正在问一些具体问题 如何在类中初始化它们 如何将函数作为参数传递 类中是否需要声明和定义函数指针 对于问题 2 我的意思是 void s void void f function what should I put as type to
  • 通过 jquery 上下移动选择选项

    所以我让这段代码适用于 Firefox 和 Chrome 它的作用是允许您在 HTML 选择表单中重新排序选项 但是当我通过 IE8 测试代码时 它有点不完整 它仅适用于前几次单击 之后您必须多次单击该按钮才能使其工作 有谁知道任何其他代码
  • 解析 HTML 表格最快、最简单、最好的方法是什么?

    我正在尝试获取这张桌子http www datamystic com timezone time zones html转换为数组格式 这样我就可以用它做任何我想做的事情 最好是 PHP Python 或 JavaScript 这种问题经常出
  • RxJs 可观察分页

    第一 这是我使用 RxJs 的第一个项目 我想通过使用它我会学到最好的东西 我找到了这个答案 使用 RxJs 将分页请求转换为 Observable 流但评论里却说 您仍然超出了最大调用堆栈 返回大约 430 页 我认为递归可能不是最好的解
  • Shift + 鼠标滚轮水平滚动

    对于水平滚动 使用 Shift 滚轮相当常见 这两者都相当容易捕获 我可以使用 MouseWheel 事件以及由 KeyDown KeyUp 事件设置的标志来跟踪何时按下 Shift 键 但是 如何真正触发水平滚动呢 我知道 WM MOUS
  • GHC 7.7 中引入的自由覆盖条件破坏了 GHC 7.6 中有效的代码

    The idea 我正在写一个DSL 编译为 Haskell 该语言的用户可以定义自己的不可变数据结构和关联函数 我所说的关联函数是指属于数据结构的函数 例如 用户可以编写 用 pythonic 伪代码 data Vector a x y
  • 如何使用 gitpython 对当前提交与上次提交进行 git diff?

    我正在尝试掌握 gitpython 模块 hcommit repo head commit tdiff hcommit diff HEAD 1 but tdiff hcommit diff HEAD HEAD 不起作用 也不 HEAD HE
  • 是否可以为 UITableView 添加边框样式? (不是边框颜色/边框宽度)

    是否可以为 UITableView 添加边框样式 不仅仅是边框颜色和边框宽度 例如凹槽边框样式 嘿 您可以使用以下方式为您的视图添加边框CALayer可以在QuartzCore Framework 以下链接将帮助您了解CALayer详细 C
  • 如何使用 Eclipse 将特定于平台的本机库包含在 .JAR 文件中?

    我刚刚开始学习JNI 我一直在遵循一个简单的示例 并且创建了一个调用本机库中的 Hello World 方法的 Java 应用程序 我想以 Win32 和 Linux x86 为目标 我的库驻留在 DLL 中 当 DLL 添加到 Eclip
  • 如何阻止 Eclipse 在每次捕获的异常时崩溃?

    当我开始调试 java 项目时 Eclipse 不断地破坏第 3 方库中的随机异常 这非常烦人 知道如何阻止这个吗 我尝试单击断点视图上的 图标 我可以看到 挂起捕获的异常 和 挂起未捕获的异常 复选框都没有选中 Eclipse 仍然在异常
  • SCSS 与字符串的算术运算

    selector width 10px width width 2 output 10px but expected 5px 上面的代码是不言自明的 请纠正我 您可以使用calc功能 selector width 10px width ca
  • 为什么不能在字节变量中存储负值?

    我正在转换可以在 Java 中运行但不能在 C 中运行的代码 byte buffer new byte 64 this buffer int this count 0x3F 128 这会生成编译时错误 常量值 128 无法转换为 字节 如何
  • 如何在 MySQL 中创建时间点架构

    I read this有关为数据库构建时间点架构的文章 在我看来 这是一个优雅的解决方案 但这篇文章是在不久前 2007 年 就已经准备好的 我想知道 1 还有其他方法可以解决这个问题吗 2 这种方法和其他方法的优缺点是什么 3 是否有可供
  • Burn 中的RegistrySearch 与 util:RegistrySearch

    我在用Burn构建 WiX 引导程序 我意识到如下所示的RegistrySearch实际上并没有搜索注册表 我用了过程监控器监视注册表访问
  • Haskell:类型推断和函数组合

    这个问题的灵感来自于此answer另一个问题 表明您可以使用定义为的函数从列表中删除每个出现的元素 removeall filter 用铅笔和纸根据以下类型进行计算filter and 该函数的类型为 removeall Eq a gt a