gpt4 book ai didi

haskell - 替代类公式的适用法律

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

Applicative 的著名替代公式(参见,例如,Typeclassopedia)是

class Functor f => Monoidal f where
unit :: f ()
pair :: f a -> f b -> f (a, b)

这导致法律看起来更像典型的身份和关联性法律,而不是您从 Applicative 获得的法律。 ,但仅当您通过对重关联同构工作时。几周前考虑到这一点,我想出了另外两个避免这个问题的配方。
class Functor f => Fapplicative f where
funit :: f (a -> a)
fcomp :: f (b -> c) -> f (a -> b) -> f (a -> c)

class Functor f => Capplicative f where
cunit :: Category (~>) => f (a ~> a)
ccomp :: Category (~>) => f (b ~> c) -> f (a ~> b) -> f (a ~> c)

很容易实现 Capplicative使用 Applicative , Fapplicative使用 Capplicative , 和 Applicative使用 Fapplicative ,所以这些都具有等效的功率。

恒等律和结合律是完全显而易见的。但是 Monoidal需要一个自然法则,这些也必须。我该如何制定它们?另外: Capplicative似乎建议立即进行概括:
class (Category (~>), Functor f) => Appish (~>) f where
unit1 :: f (a ~> a)
comp1 :: f (b ~> c) -> f (a ~> b) -> f (a ~> c)

我有点好奇这(或类似的东西)是否对某事有好处。

最佳答案

这是一个非常巧妙的想法!

我认为 fcomp 的自由定理是

fcomp (fmap (post .) u) (fmap (. pre) v) = fmap (\f -> post . f . pre) (fcomp u v)

关于haskell - 替代类公式的适用法律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45267953/

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