[Haskell] Dependent Types in Haskell [was: Eliminating Array Bound Checking through Non-dependent] types

Martin Sulzmann sulzmann at comp.nus.edu.sg
Wed Aug 11 04:56:48 EDT 2004


The append example is meant to make a general point about
the connection between dependent types and Haskell with
extensions. 

I know that the example itself is rather trivial, and
DML/index types, Omega, Haskell+GAD and Chameleon might
seem as too big canons for a rather small target.

 > Second you can express append in a much simpler and readable
 > way in Haskell using type classes:
 > 
 > -------------------------------------------------------------
 > 
 > data Nil deriving Show
 > data List a = Cons a (List a) deriving Show
 > 
 > class Append l l' l'' | l l' -> l'' where
 >    append :: l -> l' -> l''
 > instance List l' => Append Nil l' l' where
 >    append _ l' = l'
 > instance Append l l' l'' => Append (Cons a l) l' (Cons a l'') where
 >    append (Cons a l) l' = Cons a (append l l')
 > 
 > -------------------------------------------------------------
 > 
 > Thats the complete definition, no need for extra stuff or
 > complex exqualities or casts...
 > 
 > Doesn't look too bad to me.
 > 

Good, I was waiting for some type class trickery :)
You turn clauses into instance declarations.
This will only work for terminating programs!

Martin


More information about the Haskell mailing list