Data.Map和Data.IntMap中的查找函数当前返回包含在带有类型签名的Maybe中的值
lookup :: Ord k => k -> Map k a -> Maybe a
Run Code Online (Sandbox Code Playgroud)
它曾经有更普遍的类型
lookup :: (Monad m, Ord k) => k -> Map k a -> m a
Run Code Online (Sandbox Code Playgroud)
我意识到前者可能会减少额外类型规范的需要,但后者会使它更加通用,并允许在列表推导中使用查找.有没有办法模仿新版本的这种行为,还是我必须使用旧版本的库?
基本上我想将BST树变成一个映射,其中节点是键,节点的出现次数是值.所以,如果我输入这个:
toMap(叶子13)
我会的
> [(13,1)]
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show)
leaf x = Node x Empty Empty
toMap' :: Int -> Tree a -> ([(a, Int)], Int)
toMap' a Empty = ([], a)
toMap' a (Node x xl xr) = ((x, a): xl' ++ xr', k)
where (xl', i) = toMap' (a+1) xl
(xr', k) = toMap' (i) xr
toMap :: Tree a -> [(a, Int)]
toMap = fst. toMap' …
Run Code Online (Sandbox Code Playgroud)