help wanted with type error message

Norman Ramsey
Wed, 4 Apr 2001 11:59:17 -0400

I'm learning Haskell, and I'm having trouble understanding the meaning
of a `context' as applied to the declaration of an algebraic datatype.
I would like to say the following:

A formula is a predicate over environments.

> class Formula f where
>   eval    :: f a -> Environment a -> Bool       -- evaluate the formula
>   eq      :: Var -> a -> f a                    -- basic equality
>   (&)     :: f a -> f a -> f a                  -- conjunction

> type Environment a = Var -> a
> type Var = String

A row has a formula and a weight.

> data Formula f => Row a = Row (f a, Weight)
> type Weight = Float

Hugs rejects this program:

ERROR "hard.lhs" (line 14): Undefined type variable "f"

Line 14 is the definition of Row.  Can anyone explain the proper
use of a context in a data definition?