我有这样的程序:
foo x = if x == 0
then []
else [x]
但我试着这样做:
foo x = (:[]) $ if x == 0
then nullValue
else x
我无法弄清nullValue
满足[nullValue] == []
的内容,有人可以帮我解决这个问题吗? (引入Maybe
会使情况变得更糟)
我认为障碍是类型系统/类型检查?
答案 0 :(得分:4)
:
是非空列表的构造函数。它的结果永远不会是一个空列表,无论你将它应用于哪个操作数。
答案 1 :(得分:0)
如果您可以从catMaybe
中挤出Data.Maybe
,则可以在列表中使用Just
/ Nothing
。
foo x = catMaybes . (:[]) $ if x == 0
then Nothing
else Just x