dfe*_*uer 12 haskell applicative
一种众所周知的替代配方Applicative(参见,例如,Typeclassopedia)是
class Functor f => Monoidal f where
unit :: f ()
pair :: f a -> f b -> f (a, b)
Run Code Online (Sandbox Code Playgroud)
这导致法律看起来更像典型的身份和相关性法则,而不是你从中得到的法则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)
Run Code Online (Sandbox Code Playgroud)
它易于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)
Run Code Online (Sandbox Code Playgroud)
我有点好奇这个(或类似的东西)是否适合某些事情.
这真是个好主意!
我认为自由定理fcomp是
fcomp (fmap (post .) u) (fmap (. pre) v) = fmap (\f -> post . f . pre) (fcomp u v)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |