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