{-@ LIQUID "--pruneunsorted" @-} {-@ LIQUID "--no-termination" @-} module Ex where -- Testing "existential-types" {-@ foldN :: forall a
x1:a -> Bool>. (i:Int -> a
-> a
) -> n:{v: Int | v >= 0} -> a
-> a
@-}
foldN :: (Int -> a -> a) -> Int -> a -> a
foldN f n = go 0
where
go i x
| i < n = go (i+1) (f i x)
| otherwise = x
{-@ goo :: forall a