はここにいくつかの問題があります。
- あなたは通常、あなたがモナドを指定していることを意味
do
表記を使用します。
- あなたがモナドを使用したい場合でも、
ret = ...
構文はそれを行うことになって仕方ありませんが、それは...
モナドで、ret <- ...
されている必要があります。
- タイプ名は、大文字ので始まります。小文字ではありません。
- タイプはおそらく
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