Functional programming 为什么";对",;值中包含“;成功的;他们的结局如何?

Functional programming 为什么";对",;值中包含“;成功的;他们的结局如何?,functional-programming,conventions,Functional Programming,Conventions,在Scala和Haskell等函数式编程语言中,有一种类型,通常用于表示成功的结果或失败/错误对象。当包含失败时,或者称为“左”,当包含成功结果时,或者称为“右” 为什么“不成功”是“左”而“成功”是“右”呢?为什么首先要使用这些说明?来自Haskell的文档: 左构造函数用于保存错误值,右构造函数用于保存正确值(助记符:“Right”也表示“correct”)。这只是一个猜测,但在Haskell中,在第二种类型上,都是一元的,即与右构造函数关联的类型。因此,通用一元代码将只更改右类型,因此保持

在Scala和Haskell等函数式编程语言中,有一种
类型,通常用于表示成功的结果或失败/错误对象。当包含失败时,或者称为“左”,当包含成功结果时,或者称为“右”

为什么“不成功”是“左”而“成功”是“右”呢?为什么首先要使用这些说明?

来自Haskell的文档:


左构造函数用于保存错误值,右构造函数用于保存正确值(助记符:“Right”也表示“correct”)。

这只是一个猜测,但在Haskell
中,在第二种类型上,
都是一元的,即与
右构造函数关联的类型。因此,通用一元代码将只更改右类型,因此保持不变的左类型用于保存错误


因此,主要原因可能是将类型参数交换为
,使
或a b
左b
右a
读起来很烦人,没有真正的好处,你会得到一个快乐的场景,sugar:
如果结果正确。isRight
:)在这种情况下,我想
left
应该被称为
错误的
…如果你必须选择一个,那么让“Right”代表正确(如“not error”)结果是有意义的。我怀疑许多程序员已经创建了一个同构类型,它具有
成功
失败
,然后意识到这是一个“好主意”,很快就会造成混乱。我知道我有。虽然这是一个很好的参考资料,但我发现它有点难以令人信服,因为它都归结为一个助记符。这仍然可能是一个巧合——这个术语在某种程度上符合方向的使用。有人能提供关于这个结构起源的参考吗?我的第一直觉是认为这是一个历史性的意外,所以对我来说,记忆法是有意义的,但这只是我的两分钱。由于Haskell类型部分应用程序的工作方式(同样适用于
Functor
Applicative
),也不可能让
Monad
实例对左类型参数的工作方式与对右类型参数的工作方式相同。没有与
flip
等效的类型级别允许这种情况发生,因为即使启用了
TypeSynonymInstances
,如果在实例声明中使用所有类型同义词,也必须完全应用它们。我认为这是不允许的,因为在某些情况下,它会使类型推断变得不可能。