[Haskell-cafe] basic field questions

Ketil Malde Ketil.Malde at bccs.uib.no
Wed Jan 24 06:29:31 EST 2007


jamin1001 wrote:
> What if I want to do something like 
>
> data Chair = Chair {pos:: Int, color :: Int} 
> data Table = Table {pos:: Int, color :: Int} 
>   
data Properties = Props { pos, color :: Int }
data Chair = Chair Props
data Table = Table Props

or:

data Chair = Chair Int Int
data Table = Table Int Int

class Furniture a where
   pos :: a -> Int
   color :: a -> Int

instance Furniture Chair where
   pos (Chair x _) = x
   color (Chair _ c) = c

instance Furniture Table where ...
>
> Also, could someone tell me why this doesn't compile in GHC:
>
> data Test = A {a::Int} | B {a::Int, b::Int}
> data Test2 = C {c::A}
>
> (Test2 line): Not in scope: type constructor or class 'A'
>   
A is a data constructor, and not a type.  Try:

   data Test2 = C { c :: Test }
> Is there a way to qualify identical field names?  What are some standard
> practices for dealing with this?
>   
The record system is somewhat wartish, and there have been
several proposals to remedy it.  I'm not sure if any consensus
has emerged yet.

-k


More information about the Haskell-Cafe mailing list