[英]Examples of Functors without Applicatives
有没有Applicative
的Functor
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 :: a
和g' :: 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.