将类型类约束应用于另一个类型类的内部类型

 wujinlin74 发布于 2023-01-19 18:21

考虑这个功能:

f :: Num a0 => [a0] -> Int
f = -- Let's leave open what we actually do here.

我们要推广此功能工作不仅对名单,也对Set a,IntSet a等等.基本上,我们希望为MonoTraversable包含Num元素的任何元素定义此函数.

问题出在这里:我们需要结合MonoTraversable约束:

f :: MonoTraversable a1 => a1 -> Int

Num约束:

f :: Num a0 => [a0] -> Int

但是,MonoTraversable是一个类型类,因此这不起作用(这是我试过的几种变体):

f :: Num a0 => MonoTraversable a0 -> Int

从研究的几个小时开始,我想有可能以某种方式使用RankNTypes(特别是2级多态)用于此目的.

另一个失败的尝试可能会显示我的目标:

f :: Num a0, MonoTraversable a1 => a0 a1 -> Int

但是,我只是找不到任何方法,即使接近正确也是如此.使用GHC扩展对我来说很好.

1 个回答
  • (MonoTraversable a0, Num (Element a0)) => a0 -> Int 看起来它应该工作,限定类型系列实例.

    2023-01-19 18:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有