testing4 = Map.fromList
(fmap (\(userid,email)->( User {userId=userid,userEmail=email},( (t2 userid), (t3 userid) ))) userList)
where
t2 userid= fmap (\(_,ppid,pact,pclas,pdes)-> Permission {permissionId=ppid,permissionAction=pact,permissionClass=pclas,permissionDescripton=pdes}
) (DL.filter (\(puid,_,_,_,_)-> userid == puid) individualPermissions)
t3 userid =DL.nub $ fmap (\(_,rid,_)->
Map.fromList (
fmap (\ (_,rrid,rrname) ->
(Role {roleId=rrid,roleName=rrname},
fmap (\(_,_,ppid1,pact1,pclas1,pdes1)->
Permission{permissionId=ppid1,permissionAction=pact1,permissionClass=pclas1,permissionDescripton=pdes1})
(DL.filter (\(plUID,plRID,_,_,_,_)-> plUID == userid && plRID == rrid) permissionList) )
) (DL.filter (\(ruid,_,_) -> ruid == userid && (case rid of
Just _ -> True
Nothing -> False)
) roleList)
)
) rolePermissions
我想要这个类型Map User的功能([Permission],Map Role [Permission])但是我把它当作Map用户([Permission],[Map Role [Permission]])
这是包含数据http://lpaste.net/362797
的代码(我已经发布了这个评论,但后来删除并按照一些人的建议进行了更正)
答案 0 :(得分:5)
t3 userid = DL.nub $
立即说明您在t3
收到的内容是一个列表,因为它的签名是[A] -> [A]
。现在看第二行,t3
去哪里。
如果将大型函数拆分为一些较小的描述性命名的函数,事情就会简单得多。如果您不想明确地编写类型,至少可以:t thatFunctionName
检查类型。