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

标签 haskell types type-constraints

考虑这个函数:

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

我们希望将此函数推广到不仅适用于列表,还适用于 Set aIntSet 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 扩展对我来说很好。

最佳答案

(MonoTraversable a0, Num (Element a0)) => a0 -> Int 看起来应该可以工作,限定类型系列实例。

关于haskell - 将类型类约束应用于另一个类型类的内部类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22209904/

相关文章:

haskell - c2hs 没有正确安装/注册

MongoDB : How can I project all field types for a single document?

haskell - 约束子集高阶约束

algorithm - 如何在 Haskell 中编写 N 元树遍历函数

haskell - Haskell 有 foldlM' 吗?

c# - .Net 隐式转换指南

haskell - Haskell类型错误消息

c# - 条件类型约束参数

c# 通用接口(interface)不可能实现

haskell - 修复箭头轴(图表库)