为什么这些不相等?
show $ if someCondition then someInt else some double
Run Code Online (Sandbox Code Playgroud)
和
if someCondition then show someInt else show someDouble
Run Code Online (Sandbox Code Playgroud)
我了解,如果您将if ... else第一个示例中的部分本身与一个表达式隔离开,那么您就无法用匿名和类型来表示其类型Int | Double,就像您可以在TypeScript中轻松进行的操作(提及TypeScript,因为它是我经常使用的语言,该语言支持Sum类型),因此不得不诉诸于使用Either数据,然后基于调用show。
我在这里给出的示例很简单,但对我来说,认为“好吧,我们将要显示某些东西,而某些东西取决于someCondition”,而不是“好吧,如果someCondition为true,则显示someInt,否则显示someDouble”,并且也允许减少代码重复(这里的显示重复了两次,但它也可能是一个长函数的应用程序,而不是if ... else可能要考虑的> 2个分支)
在我看来,对于编译器来说,检查构成求和类型的每种类型(在此处Int | Double)是否可以用作show函数的参数并确定类型是否正确应该很容易。更好的是,无论参数的类型如何,show函数始终会返回string,因此编译器不必随身携带所有可能的“分支”(因此所有可能的类型)。
是否选择不存在这样的功能?还是我认为实施起来更加困难?
compiler-construction language-features haskell typechecking