haskell - 如何从另一张地图获取特定地图

时间:2017-05-11 08:53:15

标签: haskell functional-programming hashmap

我想在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类型。

1 个答案:

答案 0 :(得分:0)

这里有一些问题:

  • 您使用do表示法,这通常意味着您指定了 monad
  • 即使你想使用monad,ret = ...语法不是所谓的方法,那么它应该是 ret <- ... ,{{1一个单子;和
  • 类型的名称应以大写开头,而不是小写;
  • 类型应该是...

解决问题的方法是:

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(无论你给出什么样的钥匙,它将始终返回相同的值int map或error)。我认为你在寻找:

k

或替代版本:

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