[英]ignore :: Applicative f => f a -> f ()
我需要帶有此簽名的任何函數:
ignore :: Applicative f => f a -> f ()
有人可以指出我正確的方向嗎?
謝謝!
就像@Amadan 在評論中所說的那樣,您可以使用Hoogle搜索引擎輕松找到此類問題的答案。 不過,您可以通過以下幾種方法執行此操作:
您可以觀察到您需要的是映射到常量值 ( ()
)。 在 Haskell 中,這是const ()
。 你現在要做的就是修改這個函數,讓它影響(應用)函子內的值。 什么值使函數成為函子上的函數? fmap
。 將所有這些放在一起,您將得到解決方案 #1: fmap $ const ()
。
Prelude 中有一個函數接受一個函子並將其值替換為另一個: (<$) :: Functor f => a -> fb -> fa
。 這里, a
是()
,所以你得到解決方案#2: () <$
。
使用 Hoogle,你會從Data.Functor
和Control.Monad
獲得void
。 當您有一個 monadic 操作並希望通過使用()
將其關閉來忽略其結果時,此函數也很有用。
用 lambda 冗長的方式寫出來(就像你在評論中所做的那樣): ignore f = (\\_ -> ()) <$> f
,或者只是ignore = fmap $ \\_ -> ()
將fa
變成fb
用於Applicative f
怎么樣,你知道有什么可以幫助你的嗎?
在保持“外部”完整的同時改變“內部”值的東西?
提示:應用程序也是函子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.