Scalaz 7 - 为什么使用类型别名会导致 Reader 的类型类解析不明确

2024-03-14

用于测试的代码:

import scalaz.{Reader, Applicative}

class ReaderInstanceTest {

  type IntReader[A] = Reader[Int, A]
  val a = Applicative[({type l[A] = Reader[Int, A]})#l] // fine

  val b = Applicative[IntReader]
  //                 ^ ambigous implicit values
  //                   both method kleisliMonadReader ..
  //                   and method kleisliIdMonadReader ..
}

这与 Scala 相关吗类型构造函数推理的高阶统一 https://issues.scala-lang.org/browse/SI-2712票?如果是这样(即使不是),您能否描述一下 a 和 b 情况下发生了什么?

您是否有关于何时使用 lambda 类型以及何时使用类型别名的指南,以便从长远来看一切正常,不会出现意外错误?


是的,这与 SI-2712 有关。

kleisliIdMonadReader仅用于指导类型推断;它只是转发到kleisliMonadReader。通过提供类型别名IntReader,scalac 不需要这种帮助,并且可以推断出类型参数kleisliMonadReader直接地。这导致了歧义。

我刚刚采取了一种补救措施:我们可以通过在子类中定义一个来确定这些隐式相对于彼此的优先级。

https://github.com/scalaz/scalaz/commit/6f9ae5f https://github.com/scalaz/scalaz/commit/6f9ae5f

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

Scalaz 7 - 为什么使用类型别名会导致 Reader 的类型类解析不明确 的相关文章

随机推荐

  • Release 文件夹中的 vshost.exe 文件?

    为什么会为我的应用程序的发布版本生成 appname vshost exe 文件 我可能会补充一点 我正在使用外部 dll 库和一些不安全的代码 更有趣的是 我从 Release 文件夹启动的应用程序无法正常工作 从 Debug 文件夹启动
  • 自动在firestore索引中添加索引

    Can i 自动地添加索引在火库索引 我的应用程序使请求过滤器 and refers to 火库 for 显示结果 但如果firestore无法显示结果 在控制台中我看到link to 火库 for 添加索引 所以如果我push on th
  • 必须在 ConnectionDriverName 属性中指定 JDBC Driver 或 DataSource 类名“如何解决?”

    概述 这是我的第一个关于 Websphere 7 Server JPA 1 0 EJB Derby Database 的教程 第一 我的数据源名称是EJB3BANK 我的目标数据库是SHOP 第二 这个持久性 xml file
  • DropBoxManager 用例?

    我注意到一个DropBox管理器 http d android com reference android os DropBoxManager html自 FroYo API 8 以来已在 Android API 中引入 它看起来像是一个替
  • 简单测试 Spring Boot 安全性

    我正在努力测试受 Spring Security 保护的 URL 的访问控制 配置如下 http authorizeRequests antMatchers api user user authenticated antMatchers a
  • 如何加密 iPhone 上的 CoreData 内容

    我想将一些信息静态加密存储在 iPhone 应用程序上 我是 iPhone 开发新手 对 CoreData 以及它如何与视图集成不太熟悉 我的数据为 JSON 但我可以轻松地将其放入 SQLITE3 数据库或任何其他支持数据格式中 我将采用
  • Bootstrap 导航栏通知徽章

    我正在建立一个网站 允许用户互相发送消息 我使用 AJAX 收到了许多新消息 因此 我只需要找到一种方法来显示badge在用户的导航栏中 这是我想要实现的目标 我想要badge将使用创建 span class badge badge pil
  • ng-bootstrap 日期选择器不工作

    我正在尝试在我的 angular2 项目中使用 ng bootstrap 日期选择器 但出现以下错误 There is no directive with exportAs set to ngbDatepicker 这是我的代码
  • 从 URL 插入图像

    以下代码适用于大多数图像 URL 但对于此特定 URL 我收到错误 Sub test Sheets 1 Shapes AddPicture https images na ssl images amazon com images M MV5
  • 如何将侦听器附加到列表视图?

    我有一个ListView每行都有一个自定义布局TextView和三个EditText 当我单击其中的单个行时ListView一项活动启动后会将您带到另一页面 我写了一些代码 但它不起作用 代码如下所示 在适配器类 getView 方法中 我
  • Picasso 从其 URI 加载可绘制资源

    我必须展示一个drawable from res进入一个ImageView 在此应用程序中 出于某些原因我使用毕加索 在这种情况下 我需要加载drawable使用它的 URI 而不是它的 id 为此 这是我的代码 uri Uri parse
  • 如何将多个文件作为单独的数据帧读取并在列上执行计算?

    我计算单个股票的回报如下 data pd read csv r file csv data index data Date data Return data AAPL pct change 1 100 data out put Date A
  • 接收 gcm 推送通知时刷新活动

    Update GCM https developers google com cloud messaging 已弃用 请使用FCM https firebase google com docs cloud messaging How to
  • 如何覆盖温莎城堡中注册的组件?

    我刚刚开始使用 Windsor 所以请温柔点 我有一个场景 我希望能够覆盖 替换放置在 Windsor 容器内的组件 继续阅读 在我的产品代码中 我希望能够注册一个实现基类的组件 并使用容器来解析实现者 到目前为止 使用 container
  • 如何在 cypress 中测试错误请求

    我正在使用不正确的凭据测试 cypress 中的 POST 方法的日志记录 这会返回 400 个错误请求 我需要对其进行测试 这就是我所拥有的 describe Login API Test Correct user login gt it
  • 如何使用 pandas.assign 从 pandas DataFrame 索引创建新列

    我正在尝试使用 pandas 分配方法创建一个新列 该列从 Dataframe 索引中派生其值 我真的很想使用分配函数来实现所需的输出 我该怎么做呢 提前致谢 import pandas as pd df pd DataFrame 1 2
  • 新的 WPF 窗口仅显示在原始窗口下方

    在我的 WPF 应用程序中 主窗体上有一个 ListView 用于显示数据集中的绑定数据 当用户双击 ListView 中的一行时 会打开一个详细信息窗口 在我的 XAML 中 我使用了一种样式在列表视图上创建双击处理程序
  • 从 php 向 ajax 发送错误消息

    我正在尝试从 php 向 ajax 发送 通知 或错误消息 我正在努力实现这样的目标 php if myString Send stringIsEmpty error to ajax else if myString foo Send st
  • Google API:使用 oauth2client.client 从刷新令牌获取凭据

    我正在使用google官方oauth2client client来访问google 加上API 我有一个存储在数据库中的刷新令牌 不会过期 并且需要 从中重新创建临时 凭据 访问令牌 但我无法找到一种方法来使用谷歌提供的官方库来做到这一点
  • Scalaz 7 - 为什么使用类型别名会导致 Reader 的类型类解析不明确

    用于测试的代码 import scalaz Reader Applicative class ReaderInstanceTest type IntReader A Reader Int A val a Applicative type l