Trên thực tế, có một, hơi vô lý, cách để xấp xỉ này:
{-# 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 = {- ... -}
tôi có thể không thực sự khuyên cho phép hai phần mở rộng ngôn ngữ chỉ vì lợi ích của abbreviating loại trong chữ ký, mặc dù nếu bạn đã sử dụng chúng (hoặc GADT thay vì gia đình kiểu) Tôi cho rằng nó không thực sự làm tổn thương gì cả.
Sang một bên, bạn nên xem xét sắp xếp lại các loại của mình trong các trường hợp như thế này, như ehird gợi ý.
Nguồn
2012-01-11 17:00:00
Tôi cho rằng điều này giả định rằng 'meh' không phải là đa hình? –