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 搜索引擎轻松找到此类问题的答案。不过,您可以通过以下几种方式执行此操作:
您可以观察到您需要的是一个到常量值 (()
) 的映射。在 Haskell 中,即 const ()
。您现在要做的就是修改此函数,以便它会影响(应用)仿函数中的值。什么值使函数成为函子上的函数? fmap
。将所有这些放在一起,您将得到解决方案 #1:fmap $ const ()
.
Prelude 中有一个函数接受一个函子并将其值替换为另一个函数:(<$) :: Functor f => a -> f b -> f a
。这里,a
是 ()
,所以你得到解决方案 #2:() <$
.
使用Hoogle,你从Data.Functor
和Control.Monad
得到void
。当你有一个 monadic 动作并想通过 ()
.
切换它来忽略它的结果时,这个函数也很有用
用 lambda 以冗长的方式写出来(就像你在评论中所做的那样):ignore f = (\_ -> ()) <$> f
,或者只是 ignore = fmap $ \_ -> ()
我需要具有此签名的任何函数:
ignore :: Applicative f => f a -> f ()
有人能给我指出正确的方向吗?
谢谢!
如何将 f a
变成 f b
以获得 Applicative f
,你知道有什么可以帮助你的吗?
在保持 "outside" 不变的同时更改值 "on the inside" 的东西?
提示:应用也是函子。
正如@Amadan 在评论中所说,您可以使用 Hoogle 搜索引擎轻松找到此类问题的答案。不过,您可以通过以下几种方式执行此操作:
您可以观察到您需要的是一个到常量值 (
()
) 的映射。在 Haskell 中,即const ()
。您现在要做的就是修改此函数,以便它会影响(应用)仿函数中的值。什么值使函数成为函子上的函数?fmap
。将所有这些放在一起,您将得到解决方案 #1:fmap $ const ()
.Prelude 中有一个函数接受一个函子并将其值替换为另一个函数:
(<$) :: Functor f => a -> f b -> f a
。这里,a
是()
,所以你得到解决方案 #2:() <$
.使用Hoogle,你从
Data.Functor
和Control.Monad
得到void
。当你有一个 monadic 动作并想通过()
. 切换它来忽略它的结果时,这个函数也很有用
用 lambda 以冗长的方式写出来(就像你在评论中所做的那样):
ignore f = (\_ -> ()) <$> f
,或者只是ignore = fmap $ \_ -> ()