-- | 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