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 _ _)
空洞 _
必须用合适的类型填充(在某些情况下包括元组)。
我无法理解这个问题的答案
练习 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 _ _)
空洞 _
必须用合适的类型填充(在某些情况下包括元组)。