私自身の理解では、Haskell で 2 つの引数を取る関数を定義したいと考えています。両方とも整数、または両方とも文字です。次のように、引数の簡単な検査を行います。
foo 1 2 = 1
foo 2 1 = 0
foo 'a' 'b' = -1
foo _ _ = -10
これは、引数が Num 型か Char 型かがわからないため、コンパイルされないことがわかっています。しかし、次のように引数を多態的にすることはできません。
foo :: a -> a -> Int
それは、本体の Char (または Int) でなければならないと言っているからです。
Haskellでこれを行うことは可能ですか? カスタムタイプを作成することを考えましたか?何かのようなもの:
data Bar = Int | Char
foo :: Bar -> Bar -> Int
しかし、これも有効ではないと思います。一般に、Haskell の関数が明示的に 1 つの型であるか、型クラスにポリモーフィックであり、関数本体での特定の型の使用を禁止するかの中間点があるかどうかについて、私は混乱しています。