繁体   English   中英

没有应用程序的函数的示例

[英]Examples of Functors without Applicatives

有没有ApplicativeFunctor s的好例子? 好的,我正在寻找非平凡(不是Const Void )的例子,这些例子不需要对undefined诉求。 如果没有,是否有任何方法可以证明那里的空间无趣?

这类似于不是Functor / Functor / Applicative / Monad的好例子? ,但那里没有完全解决。

作为一个后续问题,是否有任何有趣的Functor s示例可能会因为有太多非规范的Applicative实例有意义而没有Applicative实例? 例如,“扩展的Maybe ”有点无聊

data MayB a = Jus a | Nothing1 | Nothing2 | Nothing3 | ...

instance Applicative MayB where
  pure = Jus
  Jus f <*> Jus x = Jus (f x)
  Jus f <*> n     = n
  n     <*> Jus x = n
  n1    <*> n2    = methodOfResolvingNothingWhatsoever n1 n2

是否存在Applicative实例的变体更具实质性的示例?

我看到仿函数但不是应用程序的主要地方是大型产品类型。 考虑类似的事情

 data Mean where
    Unfair :: Monad a => a () -> Mean
 data Foo a = Bar Int Mean a

这很容易成为一个仿函数,但是没有办法让它成为一个应用程序,因为

 (Bar i g f) (Bar i' g' a) = Bar ??? ??? (f a)

我们只能填写我们的??? 由于我们无法指定某种以任何关联的方式组合任意类型g :: ag' :: b两个值的东西,因此它们至少在一种方式Mean具有类似幺半群的特征。

另外,我们需要mempty或者像pure :: a -> fa 我们给出了a大部分涉及a的数据类型很容易构造,但其余的需要一个理智的“空”值。

因此,如果我们将应用程序和仿函数粉碎成一个大类型,大多数lens都会分崩离析,因为lens大多数有用情况都涉及这样的情况,其中没有合理的Applicative实例。

所以把它放在一个手动挥之不去的方式:当一个类型的很多“东西”与类型参数不直接相关时,我们需要一种方法来合并所有这些“东西” “这并不总是可行的。

一个非常重要的(如果不公平)的例子是

{-# LANGUAGE ExistentialQuantification #-}

data AFunctor a = forall f . Functor f => AFunctor { unFunct :: f a }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM