Haskell 将“查找”返回的“Nothing”映射为默认值

Haskell 将“查找”返回的“Nothing”映射为默认值,haskell,Haskell,假设我有一个类型为[Int,Integer]的列表l,每个元组中的第一个元素是0到n范围内的唯一索引I,每个元组中的第二个元素是关联值v 我想把这个列表扩展成一个长度为10的l'类型[Integer]的列表,这样l!!i==v代表所有i,l和l中的v!!如果j,u不在l中,则j==0 即:[1,10,6,7]=>[0,10,0,0,0,0,7,0,0,0,0] 我不知道怎么做,我试过: map (\i -> lookup i l) [0..n] 这是可行的,只是结果是一个可能的列表。一个

假设我有一个类型为[Int,Integer]的列表l,每个元组中的第一个元素是0到n范围内的唯一索引I,每个元组中的第二个元素是关联值v

我想把这个列表扩展成一个长度为10的l'类型[Integer]的列表,这样l!!i==v代表所有i,l和l中的v!!如果j,u不在l中,则j==0

即:[1,10,6,7]=>[0,10,0,0,0,0,7,0,0,0,0]

我不知道怎么做,我试过:

map (\i -> lookup i l) [0..n]
这是可行的,只是结果是一个可能的列表。一个显而易见的解决办法是:

integerOrZero :: Maybe Integer -> Integer                                        
integerOrZero Nothing  = 0                                                       
integerOrZero (Just n) = n    
然后:

map integerOrZero $ map (\i -> lookup i l) [0..n]
但我想知道是否有一种更简单的方法——也许是一行程序——用默认值编写这个查找。我想也许在这里不起作用

上下文:我正在尝试生成一个0到n之间的值的柱状图,给出它们的列表,因此总体而言,到目前为止我已经:

import Data.List (group, sort)

hist l = map integerOrZero $ map (\i -> lookup i l') [0..n]
  where l' = map (\x -> (head x, length x)) $ group $ sort l
我想用基本包中的函数尽可能简洁地写这篇文章。

有数据。Maybe.fromMaybe,它经常被遗忘


如果使用Data.Map.Strict,则有更好的选择。一定是你想要的。

那看起来正是我需要的,谢谢。