[Haskell-cafe] Re: Type Synonyms

Henning Thielemann lemming at henning-thielemann.de
Thu Oct 11 05:02:44 EDT 2007

On Thu, 11 Oct 2007, Tom Davies wrote:

> Andrew Wagner <wagner.andrew <at> gmail.com> writes:
>> If you change your type declarations to 'newtype' declarations, I
>> believe you would get the effect that you want, depending on what you
>> mean by 'equivalent'. In that case, Foo and Bar would essentially be
>> strings, but you could not use either of them in a place where the
>> other is expected, nor where a String is expected. See
>> http://haskell.org/haskellwiki/Newtype for more information. Hope this
>> helps!
> I wanted to avoid wrapping the string with a constructor.
> I suppose what I'm really asking for is for each type to implicitly define a
> 'type class with no methods', and to be able to create new instances of
> that type class which simply behave as the underlying
> type.

For custom types you can add phantom type parameters. This way you can 
make types distinct while being able to apply the same functions to their 


data SpecialString usage = SpecialString String

Then you can define a generic function like

   take :: Int -> SpecialString usage -> SpecialString usage

or a specialised function like

   foo :: SpecialString Foo -> SpecialString Foo

More information about the Haskell-Cafe mailing list