我有一个类似下面提供的函数:
zip :: [a] -> [b] -> Maybe [(a,b)]
zip (headX:tailX) (headY:tailY) = (headX,headY):zip tailX tailY
zip _ _ = Nothing
现在
zip tailX tailY
将返回一个类型为Maybe的列表,并且我尝试使用以下方法将(headX,headY)前置到该列表:运算符。有没有简单的方法可以做到这一点?如果我试图直接将它前置,编译器会给我错误,因为:运算符只对列表有效
2条答案
按热度按时间ni65a41a1#
Maybe []
不是[]
。您不能直接使用:
。但是您可以定义一个函数来为您执行此操作,使用模式匹配来获取其中包含的列表(如果存在列表)。
现在:
c2e8gylq2#
一种方法是使用
fmap
将您的prepending-to-a-list操作转换为prepending-to-every-list-in-a-container-of-lists操作。有时候使用
fmap
的中缀版本会更清楚。在这种情况下,我没有强烈的偏好;让你心指引你