[Haskell-cafe] tuple and HList

Keean Schupke k.schupke at imperial.ac.uk
Sun Mar 20 18:05:06 EST 2005

Frederik Eaton wrote:

>Another thing which I don't think is mentioned in the paper, which is
>convenient, is that you can define HLists all of whose elements are
>members of a given class:
>class HListShow l
>instance HListShow HNil
>instance (Show a, HListShow l) => HListShow (a :* l)
You can avoid the need to declare a new class for each constrained list
by using the following:

 >class Constraint c a
 >data SHOW
 >instance Show a => Constraint SHOW a
 >class HListConstraint c l
 >instance HListConstraint c HNil
 >instance (Constraint c a,HListConstraint c l) => HListConstraint c 
(HCons a l)

You can now constrain a list as follows:

 >assertShow :: HListConstraint SHOW l => l -> l
 >assertShow = id

The type parameter can be made first class using:

 >showConstraint :: SHOW
 >showConstraint = undefined

So we can now pass this as a parameter:

 >assertConstraintOnHList :: HListConstraint c l => c -> l -> l
 >assertConstraintOnHList _ = id


More information about the Haskell-Cafe mailing list