9
我想在我的代码中添加一些本地函数的类型签名。但是,它们的类型涉及匿名的,存在边界的类型变量。由于它们是匿名的,我不知道如何编写类型签名。我怎样才能引用这种类型的变量?引用一个存在型变量
在以下示例中,go
的类型为[b] -> Int -> Int
,其中b
是由模式匹配T (x_shared:xs) g
绑定的类型。我可以写什么类型的签名?
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
您mightfind这个有用:http://stackoverflow.com/questions/13828602/outer-bound-type-declarations-without-scopedtypevariables – 2013-02-28 05:36:26