Haskell:fromList难度大

时间:2018-02-22 17:57:23

标签: haskell

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

的代码

(我已经发布了这个评论,但后来删除并按照一些人的建议进行了更正)

1 个答案:

答案 0 :(得分:5)

t3 userid = DL.nub $立即说明您在t3收到的内容是一个列表,因为它的签名是[A] -> [A]。现在看第二行,t3去哪里。

如果将大型函数拆分为一些较小的描述性命名的函数,事情就会简单得多。如果您不想明确地编写类型,至少可以:t thatFunctionName检查类型。