これはおそらく非常に基本的な質問ですが...
次のように定義された関数
foo :: a -> Integer
任意の型から整数への関数を示します。もしそうなら、理論的には、そのように任意のタイプに対してそれを定義できるはずです
foo 1 = 10
foo 5.3 = 100
foo (x:xs) = -1
foo _ = 0
しかし、Haskell では、 のような一般的な定義しか許可されていませんfoo a = 0
。
a
また、 Show typeclass のインスタンスなど、型の特定のクラスの 1 つに制限したとしても、次のようになります。
foo :: (Show a) => a -> Integer
あなたはまだ何かをすることはできません
foo "hello" = 10
foo _ = 0
"hello" :: [Char]
のインスタンスですがShow
なぜそのような制限があるのですか?