[Haskell-cafe] Signature for non-empty filter
Henning Thielemann
lemming at henning-thielemann.de
Thu Feb 7 03:12:35 EST 2008
On Thu, 7 Feb 2008, Neil Mitchell wrote:
> Hi
>
> > I think what you want to say now is not just
> >
> > (filter f l) is type correct when there is some argument on which f
> > returns true
> >
> > but
> >
> > (filter f l) is type correct when there is some *element of l* on
> > which f returns true
>
> or in Haskell:
>
> filterNonEmpty f x = assert (not $ null res) res
> where res = filter f x
>
> If you give that definition to the Catch tool
> (http://www-users.cs.york.ac.uk/~ndm/catch/) it will try and prove
> each call is safe. For certain examples, Catch will do the job very
> well - for example if your filter is something structural like isJust
> or null.
Indeed, if Catch or ESC or similar tools can handle such specifications it
would be great. However I suspect that the translation you gave is
different from what I wanted. I consider a function buggy, if it
implements 'const' considerably more complicated than just saying 'const'.
:-) That is, I only want to reject a function if it _always_ returns the
empty list. Your 'filterNonEmpty' is rejected whenever _some_ arguments
yield the empty list.
More information about the Haskell-Cafe
mailing list