"Galchin, Vasili" <[EMAIL PROTECTED]> writes:

> ok guys .. what is this "phantom type" concept? Is it a type theory thing or
> just Haskell type concept?

Here's another example.  Say you want to use bytestrings with
different encodings.  You obviously don't want to concatenate a string
representing Latin characters with a string in Cyrillic.

One way to do this, is to define phantom types for the encodings, and
a bytestring type that takes additional type parameter

   data KOI8
   data ISO8859_1
     :

   data Bytestring enc = MkBS ...

Operations like concat work on same-typed bytestrings:

   concat :: Bytestring e -> Bytestring e -> Bytestring e

The parameter (enc) isn't used on the right hand side, so all
Bytestrings will have the same representation, but Bytestring KOI8 and
Bytestring ISO8859_1 will have different types, so although the
runtime won't know the difference, trying to 'concat' them will give
you a type error at compile time. 

-k
-- 
If I haven't seen further, it is by standing in the footprints of giants
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to