gpt4 book ai didi

haskell - 双仿函数与箭头方法

转载 作者:行者123 更新时间:2023-12-04 01:07:58 25 4
gpt4 key购买 nike

Bifunctor 之间有一点重叠和 Arrow方法:

class Bifunctor p where
first :: (a -> a') -> p a b -> p a' b
second :: (b -> b') -> p a b -> p a b'
bimap :: (a -> a') -> (b -> b') -> p a b -> p a' b'

class Arrow (~~>) where
...
first :: (a ~~> a') -> (a, b) ~~> (a', b)
second :: (b ~~> b') -> (a, b) ~~> (a, b')
(***) :: (a ~~> a') -> (b ~~> b') -> (a, b) ~~> (a', b')
Bifunctor类带有与 Functor 完全相似的法律。 .
Arrow类附带许多法律不同的法律和关于 (***) 的有点神秘的警告。 :“请注意,这通常不是仿函数。”令人惊讶的是(对我而言)只有一条关于 (***) 的法律。 :
first f >>> arr (id *** g) = arr (id *** g) >>> first f
Arrow (->)实例和 Bifunctor (,)实例完全匹配,因此 bimap @(,) = (***) @(->) .这有什么特别的意义吗?有没有有意义的假设
class Foo (~~>) p where
biFoo :: (a ~~> a') -> (b ~~> b') -> p a b ~~> p a' b'

如果是这样,那是否承认功能依赖?

最佳答案

Arrowcartesian closed categories 类的(有点 SCSS )前体, 或至少 cartesian monoidal categories .具体来说,对于张量积为 (,) 的幺半群类别和单位元素() .

回想一下 monoidal category以张量积为双仿函数的特征,因此 Arrow 之间存在联系和 Bifunctor .
***实际上有比您列出的更多的法律,只是图书馆选择根据 first 制定这些法律反而。这是该类的等效定义:

class (Category k, Category k') => EnhancedCategory k k' where
arr :: k a b -> k' a b
-- arr id ≡ id
-- arr (f . g) = arr f . arr g
class (EnhancedCategory (->) a) => Arrow a where
(***) :: a b c -> a b' c' -> a (b,b') (c,c')
-- (f***id) . (g***id) ≡ (f.g)***id
-- (id***f) . (id***g) ≡ id***(f.g)
-- arr fst . (f***id) ≡ f . arr fst
-- arr snd . (id***g) ≡ g . arr snd
-- ¿ arr swap . (f***g) ≡ (g***f) . arr swap ?
-- ((f***g)***h) . assoc ≡ assoc . (f***(g***h))
diag :: a b (b,b)

first :: Arrow a => a b c -> a (b,d) (c,d)
first f = f***id
second :: Arrow a => a b c -> a (d,b) (d,c)
second g = id***g
(&&&) :: Arrow a => a b c -> a b d -> a b (c,d)
f&&&g = (f***g) . diag

顺便说一句,也可以删除 arr用于提升纯函数,而只为父类(super class)提供专用方法 fst , sndassoc . I call that class Cartesian .这允许定义不包含任意 Haskell 函数的“箭头”类别; linear maps是一个重要的例子。

关于haskell - 双仿函数与箭头方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57011605/

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