# Data declaration with constraint

### From HaskellWiki

## Contents |

## 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 typeT a

a

T

T

E.g.

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 adata

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,

whereT a

a

## 3 See also

- Henning Thielemann in Haskell-Cafe: Context for type parameters of type constructors
- Mark Nicholls in Haskell-Cafe: nice simple problem for someone struggling....