在 Haskell 中分配多个变量

Assigning multiple variables in Haskell

刚开始 Haskell,我正在尝试找出基于单个条件分配多个变量的最佳方法。到目前为止,我一直在打包和解包元组。有没有 better/more 惯用的方法?

(var1, var2, var3) = 
    if foo > 0
        then ("Foo", "Bar", 3)
        else ("Bar", "Baz", 1)

也很好奇打包和解包元组的成本。如果我没看错 this,这似乎在函数中得到了优化,但不确定赋值是否属于这种情况。

是的,非常好。如果您在启用优化的情况下进行编译,元组确实会 "unboxed",因此它们不会产生额外的成本。代码将转换为类似这样的内容:

(# var1, var2, var3 #) = 
    case foo > 0 of
        False -> (# "Bar", "Baz", 1 #)
        True -> (# "Foo", "Bar", 3 #)

一个未装箱的三元组实际上只有三个值——它没有任何额外的结构。因此,它不能存储在数据结构中,但没关系。当然,如果 foo 在编译时已知,那么 case 也会被优化掉,你只会得到三个定义。