我正在尋找具有此簽名的函式:
chainTraversal :: k -> (k -> a -> Maybe (k, b)) -> Map k a -> Map k b
你給它一個初始鍵,一個函式和一個映射。
它將提取kMap中該位置的元素,并將該元素提供給函式。基于此,該函式將回傳另一個鍵以供下一步查看。
這是過濾器和遍歷之間的某種混合,元素本身提供了下一個打開的位置。結果是已遍歷的元素串列。它可以比原始地圖更短。
編輯:考慮到評論。
uj5u.com熱心網友回復:
由于所有查找都是在原始 Map 中完成的:
foo :: k -> (k -> a -> Maybe (k, b)) -> Map k a -> Map k b
foo k f m = fromList $ unfoldr g k
where
g k = (\(k', b) -> (k', (k, b))) -- k ? k' ? you decide
<$> (f' k =<< (m `at` k))
f' k (k', a) = f k a -- or: f k' a ? you decide
或類似的東西。
您必須根據您選擇at的lookupNN功能之一來實作該功能。
這不是一個過濾器,因為它必須在第一站Nothing的生產f。
uj5u.com熱心網友回復:
沒有具有該簽名和行為的現有函式。你必須自己寫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/329027.html
上一篇:模式匹配haskell
下一篇:Haskell錯誤-無法將型別“[Int]->String”與“[Char]”匹配;預期型別:字串;實際型別:[Int]->字串
