[Haskell-cafe] Capitalization and associated type families
Jonathan Cast
jonathanccast at fastmail.fm
Mon Aug 4 15:04:21 EDT 2008
On Mon, 2008-08-04 at 19:51 +0100, Brian Hulley wrote:
> Hi,
> I'm familiar with the capitalization rules for identifiers in Haskell
> and know that they are very useful and practical e.g. by allowing
> variables to be distinguished from "constants" in patterns etc.
>
> However I'm trying to understand on a much deeper level whether or not
> they can really be justified and indeed if there is a danger that they
> can lead to inconsistency in the light of future extensions to the language.
>
> For example, why is there any distinction between a type "variable" and
> a type "constant"?
>
> To make this clearer consider the type of (map):
>
> (a -> b) -> List a -> List b
>
> (ignoring the special [] syntax for list types which would just confuse
> the issue here).
>
> With explicit quantifiers, we'd write:
>
> forall a b. (a -> b) -> List a -> List b
>
> Now this begs the question: why does "List" need to start with a
> capital? (supposing that quantifiers were always written explicitly)
AFAIK, it doesn't; the variable/constant distinction is just there to
let the implementation put the foralls in for you. Similarly, if we had
explicit foralls on equations, we could say
forall n x xn. drop (n+1) (x:xn) = drop n xn
but
forall n. drop n nil = nil
and it would be perfectly clear that `nil' in the latter case was a
constructor.
Of course, if you want to introduce this rule, you'd better start out
with it and be consistent --- require every variable to be explicitly
brought into scope. I think you'd find it pretty annoying after trying
to program in your new language for a while, though.
jcc
More information about the Haskell-Cafe
mailing list