Haskell中的Monoidal产品

时间:2018-05-20 15:54:34

标签: haskell

我正在考虑学习Haskell来完成一些特定的任务。我想做monoidal产品:

假设f:A -> Bg: C -> D是函数,我想做一个monoidal产品:

f * g : A * C -> B * D

这在Haskell中是否可以轻松实现?如果是这样,你能给出一个简单的例子吗?

1 个答案:

答案 0 :(得分:5)

Haskell将笛卡尔产品类型(您的*)拼写为(,),与(Int, Bool)一样。它并没有花费大量代码来手工构建产品态射:

prod :: (a -> b, c -> d) -> (a, c) -> (b, d)
prod (f, g) (x, y) = (f x, g y)

prod的咖喱版本,其类型为(a -> b) -> (c -> d) -> (a, c) -> (b, d),可在名称Control.Arrow.(***)Data.Bifunctor.bimap下的base中找到。这些功能中的每一个实际上都是重载的,因此它们可以用于各种类型,而不仅仅是产品,例如bimap :: (a -> b) -> (c -> d) -> Either a c -> Either b d