【发布时间】:2018-06-01 15:36:48
【问题描述】:
datatest :: [(Maybe String,Integer)]
datatest = [(Just "name1" , 111), (Just "name2" , 222), (Nothing, 333), (Just "name4",111)]
需要这样的输出
[(Just "name1",[Just "name1",Just "name4"]),(Just "name2",[Just "name2"]),(Nothing,[]),(Just "name4", [Just "name1",Just "name4"])]
在 test123 中,它需要一个包含 (Maybe Name, Id) 并给出 [(Maybe Name, [Maybe Name])] 的元组列表,其中名称列表是具有相似 id 的名称
test123 :: [(Maybe String, Integer)] -> [(Maybe String,[Maybe String])]
test123 rows =
fmap (\(name,id) ->
DL.foldl' (\(rowAcc,nameAcc) (fname,fid) ->
case (id,fid) of
(val1,val2) -> if(val1==val2)
then (fname,(nameAcc++[name]) )
else (fname,nameAcc)
(Nothing , _) -> (fname,nameAcc)
) ("",[]) rows
) rows
这是我编写的代码,但出现编译错误。
以下是我在编译时遇到的错误:
error:
• Couldn't match type ‘Integer’ with ‘Maybe t0’
Expected type: [(Maybe String, Maybe t0)]
Actual type: [(Maybe String, Integer)]
• In the third argument of ‘DL.foldl'’, namely ‘rows’
error:
• Couldn't match type ‘Integer’ with ‘Maybe t0’
Expected type: [(Maybe String, Maybe t0)]
Actual type: [(Maybe String, Integer)]
• In the second argument of ‘fmap’, namely ‘rows’
【问题讨论】:
-
如果你的名字和ids匹配,用
[(id, [Maybe Name])]代替[(Maybe Name, [Maybe Name])]不是更好吗?
标签: haskell