The problem is that you might have: instance Poly Double where ...
and then when you say: po 5 it doesn't know whether this is an Int or a Double. writing po (5::Int) should be sufficient. -- Hal Daume III "Computer science is no more about computers | [EMAIL PROTECTED] than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume On Wed, 26 Jun 2002, Alain Cremieux wrote: > 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 > _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell