Int を持つすべてのリストの型シノニムを作りたいとしましょう。
私はそれをできた:
type NumberList = [Int]
しかし、数字を含むすべてのリストを NumberList と呼びたい場合はどうすればよいでしょうか? どのように制約を設定し、「Num a」が同じと呼ばれる限り、すべての [a] と言うでしょうか?
編集::答えを見て、再考しました。私は Haskell の背後にある基本的なアイデアの 1 つに反対しているように見えましたが、報酬は比較的少額でした (形式的な問題にすぎません)。私はこれに決めました: Int または Float のみが異なる、互いに同一の 2 つのインスタンスが必要な型の場合、それらの違いは小さすぎて、Int と Float の両方を使用するために必要な回避策を保証するには不十分ですが、それらは同じものです。そのため、使用をそれらの1つに制限する必要があります。ただし、両方を使用する必要がある重要な理由がある場合は、おそらくこの重要な理由をインスタンスの名前に反映して、次のようにして問題を回避できます。
data Thing = Thing_A(String, String Float) | Thing_B(String,String,Int)
--- したがって、Haskell の型付けシステムに固執し、それらの両方をデータ型 Thing として受け入れます。私が最初にやりたかったことは、
data Thing = Thing(String, String, Float) | Thing(String, String, Int)