Personal tools

Data declaration with constraint

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(short introduction with reference to current discussion)
(maybe multi-parameter type classes are a way out)
(One intermediate revision by one user not shown)

Revision as of 17:43, 21 December 2007


1 Problem

1.1 Question

I have declared

data C a  =>  T a = Cons a

and I hoped that now the type checker knows,

that every value of type
T a
satisfies the type constraint on
. I like to declare an instance for an type constructor class for the type constructor
but its methods require type constraints that depend on the particular type constructor


instance Vector T where
   add (Cons x) (Cons y) = Cons (x+y)    -- requires Num constraint on type a

1.2 Answer

Only functions can have type constraints.

The type constraint of a
only refers to the constructors.

The designers of Haskell 98 do now think, that it was a bad decision to allow constraints on constructors.

2 Solution

But how can one bake type constraints into a type? You cannot. One should insert a discussion here, whether it is sensible to want this.

For now you have to stick to multi-parameter type classes,

T a
are separate arguments.

3 See also