哈斯克尔中的单体产品



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

假设f:A -> Bg: C -> D是函数,我想做一个幺半积:

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

这在哈斯克尔中很容易实现吗?如果是这样,你能举一个简单的例子吗?

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),可以在base中找到,名称为Control.Arrow.(***)Data.Bifunctor.bimap。这些功能中的每一个实际上都是重载的,因此它们适用于多种类型,而不仅仅是产品,例如bimap :: (a -> b) -> (c -> d) -> Either a c -> Either b d.

最新更新