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

Reply via email to