将 Either 列表映射到整数

cod*_*dde 2 lambda haskell either

我正在尝试执行以下操作:

processRights :: [Either a Int] -> Int
processRights xs = map (\Right x -> x, \Left x -> 0) xs
Run Code Online (Sandbox Code Playgroud)

所以,xs是 a [Either a Int],我希望生成一个相同长度的映射列表,其中每个 int 都有相同的 int,否则为 0。

我怎样才能做到这一点?

Fre*_*Vds 6

您可以使用either,idconst函数:

processRights :: [Either a Int] -> [Int]
processRights = map $ either (const 0) id
Run Code Online (Sandbox Code Playgroud)

either为any 运行第一个函数Left,为any 运行第二个函数Right

id返回其参数。

const忽略它的第二个参数并返回它的第一个参数,它的预期用途是让egconst 0成为一个忽略它的参数并只返回0的函数。

  • 稍微简单一点,“map (fromRight 0)”。 (4认同)
  • @DanielWagner 那太糟糕了。我喜欢它。 (2认同)