不明确的类型变量

2024-06-25

相关我之前关于遍历数据结构的问题 https://stackoverflow.com/questions/1855371/avoiding-boilerplate-when-dealing-with-many-unrelated-types,当我将代码与 uniplate 包一起使用时,我在使代码变得通用时遇到问题。我正在处理中的数据结构语言.扩展.注释.语法 http://hackage.haskell.org/packages/archive/haskell-src-exts/1.1.4/doc/html/Language-Haskell-Exts-Annotated-Syntax.html模块,它们都是带有类型参数的通用模块l. This l整个树都是一样的。

我正在编写的代码是这样的:

doInt :: Child1 l -> Child1 l
doInt (Child1 l n) = Child1 l (n + 1)

doString :: Child2 l -> Child2 l
doString (Child2 l (_:s)) = Child2 l ('j' : s)

replace :: Data l => Parent l -> Parent l
replace = transformBi doInt
        . transformBi doString

此代码在最后两行都会产生以下错误:

Ambiguous type variable `l' in the constraint:
  `Data l' arising from a use of `transformBi' at Test.hs:31:10-52
Probable fix: add a type signature that fixes these type variable(s)

我明白为什么这段代码不明确:transformBi接受一个(to -> to) and from并将其变成from;就我而言,两者之间没有联系l in Child1 ll in Parent l。我不知道如何解决它。我尝试添加类型约束,例如transformBi (doInt :: Child1 l -> Child1 l),但我得到同样的错误;就好像我在介绍一个新的l当我这样做的时候。

我如何告诉编译器我正在使用相同的l for replace, transformBi doInt and transformBi doString?

Edit: 这是演示我正在做的事情的完整程序 http://gist.github.com/251520。在GHC 6.10.4下,该程序无法编译,并出现上述错误。


看起来你需要作用域类型变量 http://www.haskell.org/ghc/docs/latest/html/users_guide/other-type-extensions.html#scoped-type-variables扩大。

{-# LANGUAGE ScopedTypeVariables #-}

replace :: forall l. Data l => Parent l -> Parent l
replace = transformBi (doInt :: Child1 l -> Child1 l)
        . transformBi (doString :: Child2 l -> Child2 l)

注意量化must明确携带l纳入范围。

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

不明确的类型变量 的相关文章

  • Scala 中的 Shapeless 结构编程:如何正确使用 SYB 实现?

    我想使用SYB http research microsoft com en us um people simonpj papers hmap 实施于无形图书馆 https github com milessabin shapeless编写
  • 将名称绑定到值与将值分配给变量

    阅读 Bartosz Milewski 的文章完整的 https www fpcomplete com school starting with haskell basics of haskell 3 pure functions lazi
  • 如何使用 Haskell 提交 html 表单

    我知道如何使用http 管道 http hackage haskell org package http conduit 2 1 0包的 simplehttp 从 URL 检索页面 现在如果那样的话怎么办 网页有一个输入文本字段和一个提交按
  • Haskell:GHC 无法推断类型。由类型签名错误绑定的刚性类型变量

    我看过几篇主题相似的帖子 但它们并不能真正帮助我解决我的问题 所以我才敢重复 现在我有一个带有签名的函数 run Expr query gt RethinkDBHandle gt query gt IO JSON 这是一个数据库查询运行函数
  • 为什么我不能将 Int 类型与 a 类型匹配

    哈斯克尔新手在这里 我在这里尝试做的事情的一个过于简单的例子 test Int gt a test i i Couldn t match expected type a with actual type Int a is a rigid t
  • 数据类型变体之间的转换

    假设我想创建一种数据类型的两种变体 一种具有特定的构造函数 另一种没有它 否则它们是相同的 我想出了这个 LANGUAGE KindSignatures LANGUAGE DataKinds LANGUAGE GADTs data Foo
  • Haskell:从后面访问列表

    今天我开始学习Haskell 我对函数式语言有点陌生 而且我非常喜欢 Haskell 然而 我有一个关于它的设计的问题困扰着我 从我到目前为止的理解来看 访问列表后面的元素似乎比访问前面的元素要复杂得多 类似于xs x where xs a
  • 如何构造 Network.HTTP.Conduit.Request 对象?

    试图构建一个Request with 网络 HTTP 管道 http hackage haskell org packages archive http conduit 1 1 0 1 doc html Network HTTP Condu
  • 如何在 GHCJS 程序中定期执行操作?

    应该有人使用setInterval通过Javascript 或者使用一些更惯用的基于线程的解决方案 Using setInterval posed 一些挑战 https stackoverflow com questions 3357661
  • ~/.cabal/config 中的“共享”是什么意思?

    我想 共享 会让cabal install更快 对吧 共享的默认值为 False 我们应该使用 True 还是 False 来共享 thanks 这意味着 还构建动态链接 又名共享 版本的库 这些版本与cabal install cabal
  • Haskell Stack 包安装错误

    user stack install dictionaries Error While constructing the build plan the following exceptions were encountered In the
  • 了解函数类型

    我在尝试理解 Haskell 如何确定函数类型时感到有点困惑 这是一个例子 boolFcn x y x 3 y 4 当我检查上述函数的类型时 它给出了结果 Num a1 Num a Eq a1 Eq a gt a gt a1 gt Bool
  • 对参数进行排序以利用柯里化

    我最近两次重构代码以更改参数的顺序 因为代码太多 黑客喜欢flip or x gt foo bar x 42正在发生 在设计函数签名时 哪些原则可以帮助我充分利用柯里化 对于轻松支持柯里化和部分应用的语言 有一系列令人信服的论点 最初来自
  • 我可以在程序内更改堆栈大小限制吗?

    我可以通过传递配置 GHC 编译的 Haskell 程序的最大堆栈大小 RTS Kn到它 在哪里n是某个数字 有没有办法在程序内更改此设置 我想对各种函数的堆栈消耗进行基准测试 因此尝试在各种限制下运行它 捕获StackOverflow例外
  • 不明确的类型变量

    相关我之前关于遍历数据结构的问题 https stackoverflow com questions 1855371 avoiding boilerplate when dealing with many unrelated types 当
  • 为什么阴谋集团重新安装“总是危险的”?

    使用 Cabal 重新安装软件包时 通常会看到以下警告 警告 请注意 重新安装总是很危险的 无论如何继续 此消息背后的一些原因是什么 目前 重新安装软件包意味着破坏性地覆盖已安装的软件包 如果旧包对系统有任何反向依赖性 它们将不再工作 为了
  • 追踪 Haskell 中的错误

    我如何获得有关 Haskell 错误发生位置的更多信息 例如 昨天我正在开发一个 Haskell 程序 该程序解析输入文件 转换数据 然后打印出报告信息 有一次 我跑了 main 然后回来了 Prelude read parse error
  • Haskell 中将函数与类型关联起来

    假设您有一个序列化器 反序列化器类型类 class SerDes a where ser a gt ByteString des ByteString gt a 事实证明 为每种类型提供一个特殊的辅助函数至关重要a e g compress
  • Haskell 中有“对象平等”的感觉吗?

    如果我在 Haskell 中有一个单链表 data LL a Empty Node a LL a deriving Show Eq 我可以轻松实现在末尾和开头插入的方法 但是在特定元素之后或之前插入又如何呢 如果我有一个LL of Inte
  • 为什么这个 HasField 实例没有被解析?

    我在用着GHC 8 2 1 我有以下模块 LANGUAGE FlexibleInstances LANGUAGE MultiParamTypeClasses LANGUAGE UndecidableInstances LANGUAGE Ty

随机推荐

  • 如何删除“其他用户”可安装触发器?

    有没有办法删除 其他用户 可安装的触发器 足够幸运地猜测要删除哪个用户只会显示他们的触发器已禁用 但仍然需要您登录他们的 Gmail 才能删除它 当您是电子表格的 所有者 时 这有点令人担忧 您无法删除其他用户的触发器 脚本的触发器与用户的
  • 对不同记录进行 PIVOT 查询

    我有下表 Id Code percentage name name1 activity 1 Prashant 43 43 James James Running 1 Prashant 70 43 Sam Sam Cooking 1 Pras
  • JQuery 移动表单在首次查看后丢失格式

    我在 JQuery mobile 中有一个页面 其中包含一个表单 该表单同时具有静态元素 在 html 中定义 和动态元素 在运行时通过脚本创建 我第一次访问我的页面时 它使用 JQuery 移动格式正确呈现 如果我回去 然后再次打开表单
  • Android MVVM startActivity 最佳实践

    我正在使用 MVVM 和 DataBinding 构建 Android 应用程序 我的 ViewModel 中有一个启动 Activity 的函数 在 ViewModel 中进行 onClick 调用可以吗 像这样 public class
  • C# 到 MySQL 服务器的 SSH 隧道

    我正在尝试编写一个简单的程序来连接到只能通过 SSH 连接的 MySQL 远程服务器 它报告 SSH 连接并且端口转发 但随后声明它无法连接到任何指定的主机 我这个配置错了吗 以下是控制台输出和代码 using System using S
  • 单击一个元素突出显示其他元素

    单击另一个元素时有什么方法可以更改元素的属性吗 例如 考虑这种方法 我有一个像这样的链接 a href 100 Click me a 然后接近它我有这个 span class clickTarget Important text span
  • 如何根据 PHP 代码或 URL 方向的变化激活 CSS 属性?

    我使用 PHP 数组更改网站中的语言lang 当用户单击链接来更改网站的语言时 我希望此链接保持 按下 或更改为不同的颜色 以便用户知道他 她所在的网站版本 在这种情况下如何激活 CSS 属性 通用 php
  • 使用 Office Automation 时检查挂起的 Office 进程

    有没有办法在使用 Office Automation 时检查 Microsoft Office 进程 即 Word Excel 是否挂起 另外 如果进程挂起 有没有办法终止它 首先我要说的是 我不建议在服务器上的服务中执行此操作 但我会尽力
  • 在Numpy数组中如何找到一个值的所有坐标

    如果我想找到所有 3D 数组中最大值的坐标 如何找到它们 到目前为止 这是我的代码 但它不起作用 我不明白为什么 s set elements np isnan table numbers table elements biggest fl
  • GDI+支持图形加速吗?

    我正在尝试使用 C 和 Win API 为 Windows 平台编写屏幕保护程序 为了渲染图形 我使用 GDI 但问题是渲染带有少量动画 淡入和淡出 的 png 变得非常 CPU 繁重 所以我想知道是否有办法为 GDI API 启用 GPU
  • 使用 NetworkStream.WriteAsync 检测错误

    如果我在调用后杀死我的服务器Login完成后 调用时不会引发异常stream WriteAsync data 0 data Count 已完成 并且返回的任务中没有错误指示 那么 我应该如何检测错误呢 当然 应该有一些迹象表明我试图通过已挂
  • 在 JavaScript 中查找内容是否具有当前网站 url

    我正在使用 TinyMCE 作为编辑器 我想执行移动验证和 URL 验证 什么是不允许的 描述中不允许输入手机号码 仅允许在描述框中输入相同的应用程序 URL 如果用户输入其他网站网址 则会引发验证错误 我使用下面的代码来验证移动设备和 u
  • 是否可以从父级覆盖 iFrame 中的 javascript?如果是这样怎么办?

    我在我们的一款触摸屏应用程序中使用 Telerik RadSpell 控件 我已经设法将其样式设置得恰到好处 但是该死的东西使用 window alert 和 window confirm 来提示用户是否想要保留更改等 我想禁用这些警报 而
  • 将 Linq to SQL 代码迁移到 .Net Core

    我们有一些使用 Linq to SQL 作为 ORM 的遗留代码 我们希望将此逻辑迁移到 Net Core 以便我们可以将其放置在 Linux 服务器上 据我所知 L2S 不包含在 Net Core 中 阻力最小的迁移路径是什么 如果您使用
  • 将巨大的 xml 参数传递给存储过程的最佳方法

    实际上我正在尝试通过一个巨大的Xml到我的存储过程 但我总是得到一个输出of memory exception 因为我想通过string其大小限制为 2G 那么这样的事情有没有办法呢 不要使用XmlDocument 将 DOM 完全加载到内
  • 在 WebView 中捕获 Flash 内存不足错误?

    当加载某些 swf文件到一个WebView 在 Flash 文件开始显示后的一瞬间 我的应用程序因 Signal 11 故障而关闭 我看不到任何异常 LogCat 转储示例位于此处 http pastebin com drx0ckT9 加载
  • 由于某种原因,reCaptcha 呈现在最右下角

    我的 ajax 表单带有 recaptcha 简化的代码
  • 如何确定卷是否支持垃圾箱?

    我正在编写一个将删除文件的应用程序 如果该卷支持 垃圾箱 文件夹 我想将文件移动到那里 否则只需删除它们 这可能只是我的搜索魔力让我失败 但我找不到如何做到这一点 这里的目的是做类似的事情 伪代码 if itemURL on volume
  • Web Api 2 Post - UrlHelper.Link 不得返回 null

    我有一个基本的 Web API 2 设置和一些基本的路由 以下是插入的默认路线和帖子 当我调用该帖子时 记录已在数据库中完美创建 但 CreatedAtRoute 调用返回 500 错误 指出 ExceptionMessage UrlHel
  • 不明确的类型变量

    相关我之前关于遍历数据结构的问题 https stackoverflow com questions 1855371 avoiding boilerplate when dealing with many unrelated types 当