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