我想在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
类型。
答案 0 :(得分:0)
这里有一些问题:
do
表示法,这通常意味着您指定了 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