Haskell 嵌入式要么

Haskell embedded Either

我无法理解这个问题的答案

练习 4.7 根据我们在上一个练习中对元组的定义,写一个 函数接受一个元组和 returns 值(如果它是一个元组),一个 Haskell-pair (i.e., ('a',5)) 如果它是一个二元组,一个 Haskell-triple 如果它是一个三元组 如果是四元组,则为 Haskell-四元组。您将需要使用 Either 类型来 代表这个。

fromTuple (One a ) = Left (Left a )
fromTuple (Two a b ) = Left (Right (a,b) )
fromTuple (Three a b c ) = Right (Left (a,b,c) )
fromTuple (Four a b c d) = Right (Right (a,b,c,d))

定义为

data Either a b = Left a
                  | Right b

我了解 Either 类型的用法,但似乎无法理解嵌入的工作原理。 在我看来,不止一个参数被传递到其中一个。

我猜你对符号感到困惑

Right (Left (a,b,c))

在这里,构造函数 Right 被传递了一个参数,即 Left (a,b,c).

类似地,在同一个表达式中,构造函数 Left 被传递了一个参数,即元组 (a,b,c)。请注意,这是单个参数,即使它是一个元组。

最后,请注意结果类型的形式为“either-of-eithers”,即

Either (Either _ _) (Either _ _)

空洞 _ 必须用合适的类型填充(在某些情况下包括元组)。