Hi, I am trying to create an overloaded function "à la Java" to be able to call it either with a string or a number. Ex : definePort "http" definePort 80 but I have problem with restrictions in Haskell's type system (or with my lack of experience with it).
The program : data PolyType = MkPolyLeft String | MkPolyRight (String, String) | MkPolyNum Int deriving Show class Poly a where poly :: a -> PolyType instance Poly String where poly s = MkPolyLeft s instance Poly (String, String) where poly p = MkPolyRight p instance Poly Int where poly i = MkPolyNum i po :: (Poly a) => a -> PolyType po = poly tpo1, tpo2, tpo3 :: PolyType tpo1 = po "35" tpo2 = po ("36", "37") tpo3 = po 39 gives the following result with ghc (5.03 & -fglasgow-exts) : cl.hs:21: Ambiguous type variable(s) `a' in the constraint `Poly a' arising from use of `po' at cl.hs:21 In the definition of `tpo3': po 39 cl.hs:21: Ambiguous type variable(s) `a' in the constraint `Num a' arising from the literal `39' at cl.hs:21 In the first argument of `po', namely `39' In the definition of `tpo3': po 39 I think I need the "closed" extension of the 'class' clause to do that (but it does not seem to be implemented yet). Is there a better solution ? Thank you, Alain _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell