Haskell 忽略::应用程序f=>;f a->;f()

Haskell 忽略::应用程序f=>;f a->;f(),haskell,applicative,Haskell,Applicative,我需要任何带有此签名的函数: ignore :: Applicative f => f a -> f () 有人能给我指一下正确的方向吗 谢谢 对于应用程序f,将fa转换为fb怎么样,您知道有什么可以帮助您的吗 在保持“外部”完好无损的同时改变“内部”值的东西 提示:应用程序也是函数。就像@Amadan在评论中说的那样,你可以通过搜索引擎轻松找到这类问题的答案。然而,这里有一些方法可以做到这一点: 您可以看到,您需要的是到常量值的映射(())。在Haskell中,这是const()

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

ignore :: Applicative f => f a -> f ()
有人能给我指一下正确的方向吗


谢谢

对于
应用程序f
,将
fa
转换为
fb
怎么样,您知道有什么可以帮助您的吗

在保持“外部”完好无损的同时改变“内部”值的东西


提示:应用程序也是函数。

就像@Amadan在评论中说的那样,你可以通过搜索引擎轻松找到这类问题的答案。然而,这里有一些方法可以做到这一点:

  • 您可以看到,您需要的是到常量值的映射(
    ()
    )。在Haskell中,这是
    const()
    。现在需要做的就是修改此函数,使其影响(应用程序)函子中的值。什么值使函数成为函子上的函数<代码>fmap。把所有这些放在一起,您就得到了解决方案#1:
    fmap$const()

  • 前奏曲中有一个函数,它接受一个函子并用另一个函子替换它的值:
    (a->fb->fa
    。在这里,
    a
    ()
    ,所以你得到了解决方案#2:
    ())f
    ,或者干脆
    忽略=fmap$\->(


  • 你试过了吗
    void
    正好有那个签名…应用程序也是函数。忽略a=fmap(\x->())a---谢谢<代码>常量可以很好,但我更喜欢:
    void=fmap\\uu->()
    Uhh,我不认为
    Applicative f=>fa->fb
    有人居住(除非包括底部等等)。如果它是(称之为
    foo
    ),那么您将拥有
    unsacecoerce=runIdentity。福。纯粹的
    。我认为@WillNess的观点是,
    函子f=>(a->b)->fa->fb
    有人居住。@K.a.Buhr是的。我最初写的
    Applicative f=>fa->fb
    是非正式的,但从字面上看没有什么意义。哦,我想我应该看看编辑历史。我认为@JosephSible在评论当前的编辑,认为他读得太多了。这些评论现在有意义了。