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
。これは、パラメーターと結果の両方が多態的である関数を作成する方法であるこの質問のテーマに関連しています。