繁体   English   中英

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

[英]Apply typeclass constraint to inner type of another typeclass

考虑以下功能:

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

我们想对此函数进行概括,使其不仅适用于列表,而且还适用于Set aIntSet a等。 基本上,我们希望为其中包含Num元素的任何MonoTraversable定义此函数。

问题来了:我们需要结合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看起来应该可以工作,可以对类型族实例进行限定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM