I just ran into a strange behaviour of both Hugs and GHC. I discussed it with John Hughes who managed to find a workaround, and suggested that I ask you whether this is really expected behaviour.

The attached file contains a small example that exhibits the problem.

--
/MpB
-----------------------------------------------------------------------------
-- Class Default - used to define default values for types

class Default a where
  defaultVal :: a

instance Default () where
  defaultVal = ()

instance Default Bool where
  defaultVal = False

instance Default Int where
  defaultVal = 0

-----------------------------------------------------------------------------
-- Data type with annotations

data MyAnnotatedType a = MAT { theInt :: Int
                             , theBool :: Bool
                             , theAnnotation :: a 
                             }

-- If the annotation type a is an instance of default, the we can define
-- default values for MyAnnotatedType a:

instance Default a => Default (MyAnnotatedType a) where
  defaultVal = MAT defaultVal defaultVal defaultVal

-----------------------------------------------------------------------------
-- Defining values of MyAnnotatedType (this is where we run into problems)

noProblem :: MyAnnotatedType ()
noProblem = defaultVal { theInt = 42 }

noProblem2 :: MyAnnotatedType Int
noProblem2 = defaultVal { theInt = 42 }

problematic :: MyAnnotatedType Int
problematic = defaultVal { theInt = 42
                         , theAnnotation = 10 
                         }

-- The line ", theAnnotation = 10" is the problematic one. It seems impossible
-- to fix the problem by rewriting this line (I've tried things such as 
-- defaultVal, error "", or adding the type explicitly). 

-----------------------------------------------------------------------------
-- A workaround (thanks to John Hughes)

-- define an unoverloaded version of defaultVal
defaultMAT = defaultVal :: MyAnnotatedType Int

workaround :: MyAnnotatedType Int
workaround = defaultMAT { theInt = 42
                        , theAnnotation = 10
                        }



_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to