# Difference between revisions of "Data declaration with constraint"

From HaskellWiki

(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 | + | 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

## Problem

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

.

### Answer

Only functions can have type constraints.
The type constraint of a `data`

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

## Solution

But how can one bake type constraints into a type ? ...

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