【问题标题】:Haskell - Either Map Only OneHaskell - 要么只映射一个
【发布时间】:2015-03-07 03:19:50
【问题描述】:

我想编写一个使用Either 值的函数和两个函数。它仅应用与内部类型兼容的功能之一。完全在努力实现这一目标。

mapAorB :: (x -> z) -> (y -> w) -> Either x y -> Either z w

【问题讨论】:

  • 模式匹配可能是你的朋友......
  • 学习用它没问题,但生产使用,你应该知道Either是bifunctor所以这只是bimapEither。
  • 我在下面使用了 bheklilr 帮助,但如果您能帮帮我,我似乎遇到了一些错误?

标签: haskell functional-programming


【解决方案1】:

首先写出函数的所有参数

mapAorB :: (x -> z) -> (y -> w) -> Either x y -> Either z w
mapAorB xz yw eitherxy = undefined

然后确定是否可以匹配任何参数。这里只有Either可以。将参数扩展为模式案例:

mapAorB xz yw (Left x) = undefined
mapAorB xz yw (Right y) = undefined

通过函数的规范,我们知道如果我们输入Left x,那么我们将得到Left z,同样,如果我们输入Right y,它将返回Right w。这给出了一个额外的提示:

mapAorB xz yw (Left x) = Left z where z = undefined
mapAorB xz yw (Right y) = Right w where w = undefined

那么您如何定义z 和w?

【讨论】:

  • 现在我们要做的,是检查内部类型是否有能力然后映射?
  • @TeodoricoLevoff 这就是Left 和Right 所做的,他们选择内容的类型。 EIther 的定义是data Either a b = Left a | Right b。 Left中的内容只能是a类型,Right中的内容只能是b类型。
  • 嗯,对了,那么剩下的就是将 Either 值映射到函数。像 ... = Left z where z = xz x,我想我破坏了语法,但我想将 Either 值映射到 Left 和 Right 的该函数。
  • @TeodoricoLevoff 你走在正确的轨道上,我会这么说。
  • 所以,像 mapAorB xz yw (Left x) = Left z where z = xz x mapAorB xz yw (Right y) = Right w where w = yw y 。 bheklilr,基于完成的步骤,我们开始模式匹配检查左右是否内部类型兼容,然后下一步是做映射部分?我再也看不到步骤了。另外,调用地图的语法是否正确?谢谢
猜你喜欢
  • 2011-03-03
  • 2019-12-02
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 2023-01-19
相关资源
最近更新 更多