ignore :: Applicative f => f a -> f ()

ignore :: Applicative f => f a -> f ()

我需要具有此签名的任何函数:

ignore :: Applicative f => f a -> f ()

有人能给我指出正确的方向吗?

谢谢!

如何将 f a 变成 f b 以获得 Applicative f,你知道有什么可以帮助你的吗?

在保持 "outside" 不变的同时更改值 "on the inside" 的东西?

提示:应用也是函子。

正如@Amadan 在评论中所说,您可以使用 Hoogle 搜索引擎轻松找到此类问题的答案。不过,您可以通过以下几种方式执行此操作:

  1. 您可以观察到您需要的是一个到常量值 (()) 的映射。在 Haskell 中,即 const ()。您现在要做的就是修改此函数,以便它会影响(应用)仿函数中的值。什么值使函数成为函子上的函数? fmap。将所有这些放在一起,您将得到解决方案 #1:fmap $ const ().

  2. Prelude 中有一个函数接受一个函子并将其值替换为另一个函数:(<$) :: Functor f => a -> f b -> f a。这里,a(),所以你得到解决方案 #2:() <$.

  3. 使用Hoogle,你从Data.FunctorControl.Monad得到void。当你有一个 monadic 动作并想通过 ().

  4. 切换它来忽略它的结果时,这个函数也很有用
  5. 用 lambda 以冗长的方式写出来(就像你在评论中所做的那样):ignore f = (\_ -> ()) <$> f,或者只是 ignore = fmap $ \_ -> ()