当前位置: 首页 > 知识库问答 >
问题:

是否可以在Haskell中定义一个具有两种可能类型的输入参数的函数?

池恩
2023-03-14
foo 1 2 = 1
foo 2 1 = 0
foo 'a' 'b' = -1
foo _ _ = -10
foo :: a -> a -> Int
data Bar = Int | Char
foo :: Bar -> Bar -> Int

共有1个答案

上官扬
2023-03-14

你可以做

type Bar = Either Int Char

foo :: Bar -> Bar -> Int
foo (Left 1) (Left 2) = 1
foo (Right 'a') (Right 'b') = -1 
foo (Left 3) (Right 'q') = 42
foo _ _ = 10

类似的事情-要么数据类型正是为了将两种类型混合在一起。您可以滚动您自己的类似类型

data Quux = AnInt Int | AChar Char | ThreeBools Bool Bool Bool

它被称为代数数据类型。

 类似资料:
  • 我有一个带参数的函数。此参数必须是两种接口之一。所以我这样写: 但我收到了以下错误。 以下是接口: 因特拉加: 内溶: 我不知道有什么问题。假设函数的参数可以有两种不同的结构。我不知道为什么Tslink会标记它。 提前感谢您的帮助。

  • 所以我被要求写一个程序,列出学生的名字和分数,并计算平均分数。您需要声明两个名为name和marks的数组。假设学生人数为5人。 声明数组名称:(使用二维数组)字符名称[num\u std][name\u len]//名称长度可以为20个字符 声明数组标记:浮点标记[num\u std]; 让我恼火的是,我不知道为什么当我尝试运行调用名称和标记的循环时我会得到一个空。我还想知道以这种方式编码我的二

  • 在TypeScript中,我可以将函数的一个参数声明为类型函数。是否有一种“类型安全”的方式来完成这件事,而这是我所缺少的?例如,考虑以下内容: save回调不是类型安全的,我给它一个回调函数,其中函数的参数是一个字符串,但我传递给它一个数字,并且编译时没有错误。我可以在保存类型安全函数中设置结果参数吗? TL;DR版本:在TypeScript中是否存在与.NET委托等价物?

  • 以下代码是递归变量函数重载的教科书示例。在clang和GCC中,它编译干净,返回36(如预期的那样): 然而,这里有一个小小的修改。它在模板定义中使用依赖类型,而不是直接使用模板参数: 它使用GCC 5.2编译并运行,但使用clang 3.8时失败: 我的问题是双重的。 是否真的有效使用参数包 typename 模式将范围解析运算符应用于包的每个成员,如 ? clang 相对于标准是否正确,或者这

  • 问题内容: 假设我通过创建共享对象并使用LD_PRELOAD首先加载它来替换函数。是否有可能使该功能的参数不同于原始库中的参数? 例如,如果我替换 pthread_mutex_lock ,这样它将代替参数 pthread_mutex_t 而是使用 pthread_my_mutex_t 。可能吗? 其次,除了函数之外,是否可以使用LD_PRELOAD更改结构声明?例如,可以向结构中增加一个字段。 问