【问题标题】:haskell - how to get specific map from another maphaskell - 如何从另一张地图获取特定地图
【发布时间】:2017-05-11 08:53:14
【问题描述】:

我想在 Haskell 中编写一个从地图返回特定地图的函数

我有:

import Data.Map as M  
...  
type m1 = M.Map Int Int  
type m2 = M.Map Int m1 

我正在尝试这样的事情:

getMap :: m1 -> Int -> m1  
getMap e k = do  
ret = M.lookup (M.size e) e  
return $ fromJust $ ret  

很遗憾,我没有返回 m1 类型。

【问题讨论】:

    标签: haskell functional-programming hashmap


    【解决方案1】:

    这里有几个问题:

    • 您使用do 表示法,这通常意味着您正在指定一个monad
    • 即使你想使用 monad,ret = ... 语法也不是这样做的,那么它应该是 ret <- ...... 是一个 monad;和
    • 类型名称应以大写开头,而不是小写;
    • 类型应该是getMap :: M2 -> Int -> M1

    所以解决方法是:

    import Data.Map as M 
    
    type M1 = M.Map Int Int                         -- uppercase types
    type M2 = M.Map Int M1                          -- uppercase types
    
    getMap :: M2 -> Int -> M1                       -- different type signature
    getMap e k = fromJust $ M.lookup (M.size e) e   -- pure function

    话虽如此,从语义上讲,这不是有多大意义:你获取地图的M.size,甚至不使用k(不管你给出什么键,它总是返回相同的值 int 映射,或错误)。我认为您正在寻找:

    getMap :: M2 -> Int -> M1  
    getMap e k = fromJust $ M.lookup k e

    或替代版本:

    getMap :: M2 -> Int -> M1 
    getMap = (fromJust .) . flip M.lookup
    

    【讨论】:

      猜你喜欢
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2010-11-07
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      相关资源
      最近更新 更多