[Haskell-cafe] Type-Level Programming
Liam O'Connor
liamoc at cse.unsw.edu.au
Sat Jun 26 09:00:55 EDT 2010
We most certainly do have type-level functions. See type families.
Cheers.
~Liam
On 26 June 2010 17:33, Jason Dagit <dagit at codersbase.com> wrote:
>
>
> On Sat, Jun 26, 2010 at 12:27 AM, Jason Dagit <dagit at codersbase.com> wrote:
>>
>>
>> On Sat, Jun 26, 2010 at 12:07 AM, Andrew Coppin
>> <andrewcoppin at btinternet.com> wrote:
>>>
>>> wren ng thornton wrote:
>>>>
>>>> And, as Jason said, if you're just interested in having the same
>>>> programming style at both term and type levels, then you should look into
>>>> dependently typed languages.
>>>
>>> Out of curiosity, what the hell does "dependently typed" mean anyway?
>>
>> The types can depend on values. For example, have you ever notice we have
>> families of functions in Haskell like zip, zip3, zip4, ..., and liftM,
>> liftM2, ...?
>> Each of them has a type that fits into a pattern, mainly the arity
>> increases. Now imagine if you could pass a natural number to them and have
>> the type change based on that instead of making new versions and
>> incrementing the name. That of course, is only the tip of the iceberg.
>> Haskell's type system is sufficiently expressive that we can encode many
>> instances of dependent types by doing some extra work. Even the example I
>> just gave can be emulated. See this paper:
>> http://www.brics.dk/RS/01/10/
>> Also SHE:
>> http://personal.cis.strath.ac.uk/~conor/pub/she/
>> Then there are languages like Coq and Agda that support dependent types
>> directly. There you can return a type from a function instead of a value.
>
> I just realized, I may not have made this point sufficiently clear. Much of
> the reason we need to do extra work in Haskell to emulate dependent types is
> because types are not first class in Haskell. We can't write terms that
> manipulate types (type level functions). Instead we use type classes as
> sets of types and newtypes/data in place of type level functions. But, in
> dependently typed languages types are first class. Along this line, HList
> would also serve as a good example of what you would/could do in a
> dependently type language by showing you how to emulate it in Haskell.
> Jason
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
More information about the Haskell-Cafe
mailing list