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

J. *_*son 13 haskell functor applicative

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

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

作为一个后续问题,是否有任何有趣的例子Functor可能会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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*zer 5

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

 data Mean where
    Unfair :: Monad a => a () -> Mean
 data Foo a = Bar Int Mean a
Run Code Online (Sandbox Code Playgroud)

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

 (Bar i g f) (Bar i' g' a) = Bar ??? ??? (f a)
Run Code Online (Sandbox Code Playgroud)

我们只能???用至少一种方式填充我们的类似于幺半群的东西而且Mean永远不会因为我们无法指定某种东西来组合任意类型的两个值g :: ag' :: b以关联方式.

此外,我们需要mempty或类似的东西pure :: a -> f a.我们给出了a大部分涉及a构造的数据类型,但其余的需要一个理智的"空"值.

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

因此,为了把这个手波浪卷发湿软的方式:当有一个类型是不直接与类型参数应用性做的就是定义在很多"东西",我们需要一种方法来合并所有的这个"东西"这并不总是可行的.

  • `Int - > Bool`可以在很多方面成为一个幺半群.`Bool`可以用我认为的四种方式制成一个monoid,然后你多次使用产品`Int`. (2认同)