[eeps] comments on eep8

David Hopwood <>
Wed Jan 9 18:40:39 CET 2008

Joe Armstrong wrote:
> 10) In the spirit of 9) I'd like to have user defined type checking
>     @spec xxx(foo:bar) -> baz:oop
>     This means that the arg 1 of xxx is of type X if foo:bar(X)
> evaluates to true.
>     The point of this is to move towards describing the properties of a system
> which can only be checked at run-time and not compile time.
>     Then we could have types like fileMustExist() meaning the file
> must exist at run time.
>     Today a file is just a string (type wise) but we might like to document
>   the fact that this string represents a file that *must* exist.

That isn't a good example, because whether or not the file exists is not
a property of the string. A file with a given path relative to a given
filesystem root may exist one second and not exist the next, so the use
of predicate types to assert its existance would be inherently prone to
race conditions.

But I agree that predicate types can be useful, when they specify pure
boolean functions of immutable values.

David Hopwood

More information about the eeps mailing list