>>257
では、

transT1 :: [a] -> [a]
transT1 = t . f
  where f = fromList :: [a] -> T1 a
        t = toList :: T1 a -> [a]

transT2 :: [a] -> [a]
transT2 = t . f
  where f = fromList :: [a] -> T2 a
        t = toList :: T2 a -> [a]

などと、T1 T2 それぞれ用の trans 関数を作って、
それらを比較しなければならないのでしょうか。

transT1 と transT2 は T1 や T2 といった型のみが違うだけなのですが、
どうにかしてこの型をパラメータとして指定できる関数は作れないものでしょうか。