过滤Nothing并解压缩Just

Tib*_*doš 4 haskell

我在使用这个程序时遇到了麻烦.

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

filterJust [] = []
filterJust x = map fromJust (filter (isJust) x)
Run Code Online (Sandbox Code Playgroud)

但是ghci不断报道这个

但是ghci不断报道这个

编辑:

我不想使用任何额外的模块,所以我这样做:

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

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

unpack (Just a) = a
Run Code Online (Sandbox Code Playgroud)

我收到了这条消息

我收到了这条消息

而且我不明白为什么.我应该可以使用Eq函数而无需导入anthing吗?

She*_*rsh 17

你不需要写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]
Run Code Online (Sandbox Code Playgroud)

所以你需要做的就是添加import Data.Maybe (catMaybes)到你的模块中.

  • [`mapMaybe`](https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Maybe.html#v:mapMaybe) 也很有用 (5认同)