gpt4 book ai didi

haskell - 什么都不过滤,只解包

转载 作者:行者123 更新时间:2023-12-04 16:23:00 25 4
gpt4 key购买 nike

我在使用这个程序时遇到了问题。

filterJust :: [Maybe a] -> [a]

filterJust [] = []
filterJust x = map fromJust (filter (isJust) x)

但是 ghci 一直在报告这个

but ghci keeps reporting this

编辑:

我不想使用任何额外的模块,所以我做了这个:
filterJust :: [Maybe a] -> [a]

filterJust x = map unpack (filter (Nothing /=) x)

unpack (Just a) = a

我收到了这条消息

and i get this message

我不明白为什么。我应该能够在不导入任何东西的情况下使用 Eq 函数吗?

最佳答案

你不需要写filterJust功能。它已经在 base 中它被称为 catMaybes : http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Maybe.html#v:catMaybes
此外,您可以看到定义此函数的更好方法:

catMaybes :: [Maybe a] -> [a]
catMaybes ls = [x | Just x <- ls]
因此,您只需添加 import Data.Maybe (catMaybes)进入你的模块。
这里这个函数使用列表的“MonadFail 糖”设计模式。您可以在以下博客文章中阅读有关它和其他模式的更多信息:
  • https://kowainik.github.io/posts/haskell-mini-patterns#monadfail-sugar
  • 关于haskell - 什么都不过滤,只解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40327699/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com