Chciałbym dodać sygnatury typu do niektórych funkcji lokalnych w moim kodzie. Jednak ich typy obejmują anonimowe, egzystencjalnie związane zmienne typu. Ponieważ są anonimowe, nie wiem, jak napisać podpis typu. Jak mogę się odwoływać do takich zmiennych typu?Odwołując się do zmiennej typu egzystencjalnego
W poniższym przykładzie go
ma typ [b] -> Int -> Int
, gdzie b
jest typem powiązanym przez wzorzec dopasowania T (x_shared:xs) g
. Jakiego rodzaju podpisu mogę na niego napisać?
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
Ty mightfind to przydatne: http://stackoverflow.com/questions/13828602/outer-bound-type-declarations-without-scopedtypevariables –