Haskell - 要么只映射一个
Posted
技术标签:
【中文标题】Haskell - 要么只映射一个【英文标题】:Haskell - Either Map Only One 【发布时间】:2015-03-07 03:19:50 【问题描述】:我想编写一个使用Either
值的函数和两个函数。它仅应用与内部类型兼容的功能之一。完全在努力实现这一目标。
mapAorB :: (x -> z) -> (y -> w) -> Either x y -> Either z w
【问题讨论】:
模式匹配可能是你的朋友...... 学习用它没问题,但生产使用,你应该知道Either
是bifunctor所以这只是bimap
Either
。
我在下面使用了 bheklilr 帮助,但如果您能帮帮我,我似乎遇到了一些错误?
【参考方案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,基于完成的步骤,我们开始模式匹配检查左右是否内部类型兼容,然后下一步是做映射部分?我再也看不到步骤了。另外,调用地图的语法是否正确?谢谢以上是关于Haskell - 要么只映射一个的主要内容,如果未能解决你的问题,请参考以下文章