我怎样才能编写一个类似int gog(float i)
and的函数float gog(int i)
(通常称为“重载”)?一些简单的重载可以通过
class PP a where
gog :: a -> Int
instance PP Bool where
gog _ = 1
instance PP Char where
gog _ = 1
但是上面的例子只是使参数多态。如果我们想让参数和结果都多态,我们必须这样写:
class PP a where
gog :: Uu b => a -> b
class UU a where
-- This function can convert between different types of UU.
fromUuToUu :: UU b => a -> b
没有fromUuToUu
,结果中的多态性gog
是不可能的。但我不会写fromUuToUu
,这与这个问题的主题有关,即如何制作一个参数和结果都是多态的函数。