Haskell では、なぜこれがコンパイルされるのですか?
splice :: String -> String -> String
splice a b = a ++ b
main = print (splice "hi" "ya")
しかし、これはしません:
splice :: (String a) => a -> a -> a
splice a b = a ++ b
main = print (splice "hi" "ya")
>> Type constructor `String' used as a class
私はこれらが同じものだと思っていたでしょう。タイプ名を3回繰り返さないようにする2番目のスタイルを使用する方法はありますか?