簡體   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