desumasuさんがid:desumasu:20070913で触れられてるDictionary Passing Styleについて書いてみようと思います。 参考:栄光のグラスゴーHaskellコンパイルシステム利用の手引 以下のようなテスト用モジュールを実験の為に使用します。 module Test (show2 , show3) where show2 :: (Show a, Show b) => a -> b -> String show2 a b = show a ++ ", " ++ show b show3 :: (Show a) => a -> String show3 a = show2 a "hoge" Dictionary Passing Style Haskellでは多くの場合、多相型の具体的な型への解決は実行時に行われます。(もちろん静的に行われる場合もあります)