Hi,

please consider the following module:

module TypeTest where

import Data.Generics

        class Data a => MyClass a where
          special :: a -> a

        generic :: MyClass a => a -> a
        generic = everywhere (mkT special)

The general idea is to define traversals about data types not known in advance. The data types must implement a "special" transformation which is then automatically extended to a "generic" transformation.

The definition of "generic" is but an example. In reality, there might also be special2 and special3 beside "special", and "generic" might combine the three special transformations in some way.

The problem is this - the module doesn't compile.

        TypeTest.hs:1:
            Ambiguous type variable `b' in the top-level constraint:
              `MyClass b' arising from use of `special' at TypeTest.hs:9

I suppose the type of "mkT special" is ambiguous. But how can I change that? No type annotation or combination of type annotations seems to help.

Suggestions appreciated,
-Stefan

_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to