In realtà, c'è uno, un po 'ridicolo, modo per approssimare questo:
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ScopedTypeVariables #-}
foo :: forall abbrv. (abbrv ~ (Some, Huge, Type, Sig))
=> abbrv -> abbrv
foo x = meh x (x, x)
where meh :: abbrv -> (abbrv, abbrv) -> abbrv
meh x y = {- ... -}
non posso davvero consigliare consentendo due estensioni del linguaggio solo per il gusto di abbreviare i tipi di firme, anche se siete già usandoli (o GADT invece di famiglie di tipi) suppongo che non faccia del male a nulla.
Sciocchezze a parte, dovresti prendere in considerazione il refactoring dei tuoi tipi in casi come questo, come suggerisce l'eird.
fonte
2012-01-11 17:00:00
Suppongo che questo presuma che 'meh' non sia polimorfico? –