gpt4 book ai didi

haskell - 因子分解器的简单定义

转载 作者:行者123 更新时间:2023-12-02 16:06:20 25 4
gpt4 key购买 nike

我正在阅读 Bartosz Milewski 发表的关于 Products and Coproducts 的精彩帖子。

考虑以下功能:

factorizer :: (c -> a) -> (c -> b) -> (c -> (a, b))
factorizer p q = \x -> (p x, q x)

(c -> (a, b)) 是分解器吗?如果是,为什么?老实说,对我来说,样本只是一个函数,需要两个高阶函数。我看不到 Product 的模式。

下一个示例:

factorizer :: (a -> c) -> (b -> c) -> Either a b -> c
factorizer i j (Left a) = i a
factorizer i j (Right b) = j b

如何识别与上述代码相对应的余积模式?

最佳答案

在这两种情况下,factorizer是因式分解器。来自博客文章:

A (higher order) function that produces the factorizing function m from two candidates is sometimes called the factorizer.

其模式是,在这两种情况下,这些函数都给出了某些方程的唯一解。

对于产品,对于每个 fg , factorizer f g是唯一满足 fst . factorizer f g = f 的函数和snd . factorizer f g = g .

对于副产品,对于每个 fg , factorizer f g是唯一满足 factorizer f g . Left = f 的函数和factorizer f g . Right = g .

因子分解器的存在表征了 Either(,)类型达到同构。这提供了一种描述乘积和和的替代方法,可以推广到其他类别(仅涉及态射的组合)。相反,data (,) a b = (,) a b 的定义和data Either a b = Left a | Right b是特定于特定语言的。

关于haskell - 因子分解器的简单定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48113603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com