Kodumdaki bazı yerel işlevlere tip imzaları eklemek istiyorum. Ancak, türleri anonim, varoluşsal olarak bağlı tip değişkenleri içerir. Anonim olduklarından, nasıl tip imza yazılacağını bilmiyorum. Bu tür değişkenlere nasıl başvurabilirim? Aşağıdaki örnekte Varolansal bir değişkene atıfta bulunma
,go
b
model maçı
T (x_shared:xs) g
bağlı türüdür
[b] -> Int -> Int
, tip vardır. Bunun için ne tür bir imza yazabilirim?
data T = forall a. T [a] (a -> a -> Int)
f :: T -> Int
f (T (x_shared:xs) g) = go xs 0
where
-- go :: what type?
go (x:xs) n = go xs $! n + g x_shared x
go [] n = n
Bu kullanışlı mightfind: http://stackoverflow.com/questions/13828602/outer-bound-type-declarations-without-scopedtypevariables –