# Data declaration with constraint

### From HaskellWiki

(Difference between revisions)

(short introduction with reference to current discussion) |
(constraint must be in front of the type) |
||

Line 5: | Line 5: | ||

I have declared |
I have declared |
||

<haskell> |
<haskell> |
||

− | data T a = C a => Cons a |
+ | data C a => T a = Cons a |

</haskell> |
</haskell> |
||

and I hoped that now the type checker knows, that every value of type <hask>T a</hask> satisfies the type constraint on <hask>a</hask>. |
and I hoped that now the type checker knows, that every value of type <hask>T a</hask> satisfies the type constraint on <hask>a</hask>. |

## Revision as of 17:36, 21 December 2007

## Contents |

## 1 Problem

### 1.1 Question

I have declared

data C a => T a = Cons a

T a

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 ? ...

## 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....