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所以这只是bimapEither 我在下面使用了 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

那么您如何定义zw

【讨论】:

现在我们要做的,是检查内部类型是否有能力然后映射? @TeodoricoLevoff 这就是LeftRight 所做的,他们选择内容的类型。 EIther 的定义是data Either a b = Left a | Right bLeft中的内容只能是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 - 要么只映射一个的主要内容,如果未能解决你的问题,请参考以下文章

基于 Haskell 中的字符串映射证明打印函数的穷举性

haskell中的并行映射

haskell 生成 FFI 导出包装代码

Haskell,只修改一个结构域

Haskell:高效累加器

Haskell 分析