就我自己的理解而言,我想在 Haskell 中定义一个函数,它接受两个参数——要么都是整数,要么都是字符。它对参数进行了一些琐碎的检查,如下所示:
foo 1 2 = 1
foo 2 1 = 0
foo 'a' 'b' = -1
foo _ _ = -10
我知道这不会编译,因为它不知道它的 args 是 Num 类型还是 Char 类型。但我不能让它的参数多态,比如:
foo :: a -> a -> Int
因为那时我们说它必须是正文中的 Char(或 Int)。
是否可以在 Haskell 中执行此操作?我想也许创建一个自定义类型?就像是:
data Bar = Int | Char
foo :: Bar -> Bar -> Int
但我也不认为这是有效的。一般来说,我很困惑是否在 Haskell 中的函数显式为 ONE 类型或多态到类型类之间存在中间立场,禁止在函数体中使用特定类型。