[英]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 a
, IntSet 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.