-- | A somewhat fancier example demonstrating the use of Abstract Predicates and exist-types module Ex () where ------------------------------------------------------------------------- -- | Data types --------------------------------------------------------- ------------------------------------------------------------------------- data Vec a = Nil {-@ efoldr :: forall b a
x1:b -> Bool>. b
-> ys: Vec a -> b
@-} efoldr :: b -> Vec a -> b efoldr b Nil = b